2010-04-22 51 views
0

我有一个Oracle Date类型,我需要插入当前日期。Java - 创建oracle日期字段

我使用Java来生成这个日期,但一切到目前为止,我已经试过yeilds以下错误:

java.sql.SQLException: ORA-01843: not a valid month 

任何人都可以提出Java代码来生成正确的日期?

更新:

在DB的日期看起来像11-DEC-06

SO,我已经试过如下:

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("d-MMM-yy"); 
String date = sdf.format(cal.getTime()); 

这不起作用

+0

*你尝试过什么到目前为止? – Syntactic 2010-04-22 12:32:43

回答

3

我会建议,而不是建立一个查询字符串(这我猜你正在做的),改为使用一个PreparedStatement,它通常更容易(尤其是像这样的事情),以及更安全:

String rowToUpdate = "foo"; 
PreparedStatement ps = myConnection.prepareStatement(
     "UPDATE my_table SET date_field=? WHERE id=?"); 
Calendar cal = Calendar.getInstance(); 
java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime()); 
ps.setDate(1, sqlDate); 
ps.setString(2, rowToUpdate); 
int updated = ps.executeUpdate(); 
+0

哇,这就是我最终使用的确切代码..我想它发布之前你张贴...所以我会接受你的答案。谢谢 – llm 2010-04-22 12:50:20

0

根据您的要求使用java.sql.Date或java.sql.Timestamp。

java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime()); 
+0

是的,我只是想出了问题。你是对的,我使用的是PreparedStament,但是使用setString而不是setDate来设置通配符...并且我最终使用了java.sql.Date ..感谢 – llm 2010-04-22 12:49:04

0

如果您打算使用日期的字符串版本进行查询,那么您可能需要添加Oracle to_date函数。你可以不喜欢这样(请注意在SimpleDateFormat的额外d)

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy"); 
String date = sdf.format(cal.getTime()); 

然后在查询你会把

String query = "select * from table where date_column=to_date('" + date +"','dd-Mon-yy')";