所以我想要做的是将自定义日期和当前时间一起设置到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
我知道我做错了什么,但我已经尝试了很多东西来实现这个目标。只要工作正常,我不介意以其他方式获取当前时间
任何帮助将不胜感激
答案 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);