3
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
java.util.Date parsedDate = sdf.parse("201212130900");
java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
try
{
  PreparedStatement pstmt = connection.prepareStatement(
    "select count(*) as counter from table1 where table_key > ?");
  pstmt.setTimestamp(1,new java.sql.Timestamp(timestamp.getTime()));  
  ResultSet rs = pstmt.executeQuery();  
  while(rs.next()){
    System.out.println(rs.getInt( 1 ));
  }
  connection.close();
}
catch(Exception g){
  System.err.println(g.getMessage());
}

在输出中我收到一个错误

ORA-01843: 无效的月份。

任何人都可以协助解决上述错误吗?

4

3 回答 3

1

您从字符串到时间戳的转换是可以的。(我测试并工作)。


您的问题可能出在时区或其他方面。尝试改用这种方法,

setTimestamp(int parameterIndex, Timestamp x, Calendar cal) 

例子:

setTimestamp(1, timestamp , Calendar.getInstance(TimeZone.getTimeZone("UTC")))

更新:(table1.table_key 是一个 CHAR(24))

你应该给你一个字符串中的java日期,假设key_value被格式化为“yyyyMMddhhmm”......(出于明显的原因,其他格式不起作用)

其他选项是在您的查询中将 key_value 转换为 TIMESTAMP

试试:(我假设你正在使用 oracle db,我做了一些搜索)

1)对时间戳进行“强制转换”

“从时间戳(table_key)> 的 table1 中选择计数(*)作为计数器?”

2)使用http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htm。我不知道你是否可以这样做:

“从 table1 中选择 count(*) 作为计数器,其中 TO_TIMESTAMP(table_key,'YYYYMMDDHHMMHH24MI') > ?”

于 2012-12-13T21:11:31.843 回答
1

在 java 中,要获取格式化的日期,您可以执行以下操作:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
String sdf.format(myDate);

SimpleDateFormat中有很多选项。我已为您附上了 JavaDoc。

于 2012-12-13T21:03:49.477 回答
0

我已经解决了上述问题。

我将日期转换为“yyyyMMdd”格式,并将时间转换为“HHmm”格式,将它们存储为 2 个不同的字符串。

于 2012-12-14T21:24:45.160 回答