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) です)

key_value が「yyyyMMddhhmm」としてフォーマットされていると仮定すると、Java からの日付を文字列で指定する必要があります... (明らかな理由により、他のフォーマットは機能しません)

他のオプションはクエリにあり、key_valueをTIMESTAMPに変換します

試してください:(あなたがOracle dbで作業していると仮定して、検索を行います)

1) タイムスタンプに「キャスト」する

"タイムスタンプ(table_key) > ?" の場合、table1 からカウンターとして count(*) を選択します。

2) http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions193.htmを使用します。次のようなことができるかどうかわかりません。

「TO_TIMESTAMP(table_key,'YYYYMMDDHHMMHH24MI') > ? の table1 からカウンターとして count(*) を選択します。」

于 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 に答える