使用字符串变量将自定义日期和当前时间插入Oracle数据库

时间:2012-03-08 22:41:13

标签: java database oracle jdbc prepared-statement

所以我想要做的是将自定义日期和当前时间一起设置到Oracle数据库中的DATE类型中。 我以mm / dd / yyyy

的形式从textField中获取字符串
 String tdate = textDate.getText().trim();

为简化细节,我们只需将DATE插入一个小表即可。

 Calendar calendar = Calendar.getInstance();                                
 int hour = calendar.get(Calendar.HOUR);
 int minute = calendar.get(Calendar.MINUTE);
 int second = calendar.get(Calendar.SECOND);
 String current_time = hour+":"+minute+":"+second;

现在我们将tdate作为date和current_time的字符串作为当前时间。

放入数据库,表定义为:

create table transaction(
              tranaction_num integer,
              time_of_transaction DATE);

现在在jdbc

PreparedStatement pStmt = Conn.prepareStatement("insert into transaction values(?,?));
pStmt.setString(1, "1");
pStmt.setString(2, "to_date( '"+tdate+" "+current_time+"','mm/dd/yyyy hh24:mi:ss')");
pStmt.executeUpdate();

这给我一个错误,如下所示

 ORA-01858: a non-numeric character was found where a numeric was expected

我知道我做错了什么,但我已经尝试了很多东西来实现这个目标。只要工作正常,我不介意以其他方式获取当前时间

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:4)

您应该在将日期字符串交给数据库之前对其进行解析,并且应该使用setInt()作为第一个参数而不是setString()

SimpleDateFormat parser = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

Date date = parser.parse(tdate+" "+current_time);

String sqlStmt = "INSERT INTO transaction(tranaction_num, time_of_transaction) VALUES(?,?)";
PreparedStatement pStmt = Conn.prepareStatement(sqlStmt);
pStmt.setInt(1, 1);
pStmt.setDate(2, new java.sql.Date(date.getTime()));
pStmt.executeUpdate();

答案 1 :(得分:2)

如果你想传递一个字符串,你可能需要像

这样的东西
String sqlStmt = "insert into transaction values(?,to_date(?,'mm/dd/yyyy hh24:mi:ss'))"
PreparedStatement pStmt = Conn.prepareStatement(sqlStmt);
pStmt.setString(1, "1");
pStmt.setString(2, tdate+" "+current_time);
pStmt.executeUpdate();

然而,从良好的编码角度来看,为第一个参数执行setInt和在第二个参数执行setDate而不是将所有内容作为字符串传递会更好。

答案 2 :(得分:0)

而不是

pStmt.setString(1, "1");

使用:

pStmt.setInt(1, 1);