当我尝试将字符串解析为日历时,我收到了最奇怪的错误.它似乎弄乱了我用来设置结果日历时间的Date对象.错误非常不一致(或者我看不到任何逻辑).谁能指出我可能做错了什么?
public class caltest{
public static final SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS");
public static void main(String[] args) {
String date1 = "1992-03-11 12:00:12.123";
String date2 = "1993-03-11 12:00:12.123";
String date3 = "1994-03-11 12:00:12.123";
String date4 = "1995-03-11 12:00:12.123";
parseStringAsCalendar(date1);
parseStringAsCalendar(date2);
parseStringAsCalendar(date3);
parseStringAsCalendar(date4);
}
public static String calendarToString(Calendar cal) {
return sdf.format(cal.getTime());
}
public static Calendar parseStringAsCalendar(String s) {
Date time = null;
try {
time = sdf.parse(s);
} catch (ParseException e) {
System.out.println("Exception");
e.printStackTrace();
}
System.out.println(time.toString());
GregorianCalendar ret = …Run Code Online (Sandbox Code Playgroud) 我有以下 log4j2 配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
<Appenders>
<RollingRandomAccessFile name="SQLTiming" fileName="${web:rootDir}/log/SQLTiming.log"
filePattern="${web:rootDir}/log/SQLTiming-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{2} - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
<Console name="CONSOLE">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{2} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="jdbc.sqltiming" level="info" additivity="false">
<AppenderRef ref="SQLTiming" />
</Logger>
<Root level="error">
<AppenderRef ref="CONSOLE" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
当我尝试通过 slf4j 获取记录器时
protected static Logger logger = LoggerFactory.getLogger(DbConn.class);
Run Code Online (Sandbox Code Playgroud)
Log4j 创建附加程序失败。我查看了 log4j2 源代码,它尝试创建文件C:\Program Files\eclipse\${web:rootDir}\log\SQLTiming.log(它失败了),所以 log4j 似乎没有处理查找。
我在 Tomcat 7.0.4 中运行该应用程序,并使用http://logging.apache.org/log4j/2.x/manual/lookups.html建议的语法。我尝试使用 $${web:rootDir} (带有 2 个 …
假设我有一个像这样的oracle数据库模式:
tournaments(id,name)player(id,name)gameinfo(id,pid(引用players.id),tid(引用tournaments.id),日期)
所以在gameinfo表意味着某个玩家在给定日期的比赛中玩某个游戏.锦标赛有大约20个记录,玩家大约有16万,游戏信息大约有200万.我必须写一个查询列出锦标赛(tid在1-4范围内)以及参加该锦标赛的第一场比赛的球员数量.
我想出了以下查询:
select tid, count(pid)
from gameinfo g
where g.date = (select min(date) from gameinfo g1 where g1.player = g.player)
and g.tid in (1,2,3,4)
group by tid;
这显然不是最理想的(它运行了大约58分钟).我有另一个想法,我可以看到:
select pid, tid, min(date)
from gameinfo
where tid in(1,2,3,4)
group by pid, tid;
并在此视图上运行我的查询,因为它只有大约60万条记录,但这似乎仍然不是最优的.
你能就如何优化这个提出任何建议吗?