Java 使用字符串变量将自定义日期和当前时间插入Oracle数据库
因此,我要做的是将自定义日期和当前时间一起设置到Oracle数据库中的日期类型中。 我以mm/dd/yyyy的形式从textField获取字符串Java 使用字符串变量将自定义日期和当前时间插入Oracle数据库,java,database,oracle,jdbc,prepared-statement,Java,Database,Oracle,Jdbc,Prepared Statement,因此,我要做的是将自定义日期和当前时间一起设置到Oracle数据库中的日期类型中。 我以mm/dd/yyyy的形式从textField获取字符串 String tdate = textDate.getText().trim(); 为了简化细节,我们只需将日期插入一个小表中 Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.
String tdate = textDate.getText().trim();
为了简化细节,我们只需将日期插入一个小表中
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作为日期字符串,将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
我知道我做错了什么,但我已经尝试了很多方法来让它工作。我不介意以其他方式获取当前时间,只要它有效
任何帮助都将不胜感激如果您想传递字符串,您可能需要
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
,而不是将所有内容作为字符串传递。而不是
pStmt.setString(1, "1");
使用:
您应该在将日期字符串移交给数据库之前对其进行解析,并且应该对第一个参数使用
setInt()
,而不是setString()
你是对的,我本可以用这个,但这与我的问题无关。我只是为了它编了些东西。不过,传递字符串也同样有效。这确实会将正确的值插入必要的表中。非常感谢。但当我以SELECT*FROM transaction运行查询时;在sql命令行中。我只在交易时间列中获取日期。我想让它显示日期和时间。@RiteshAhuja-在SQL*Plus中,您需要更改会话的
NLS\u日期\u格式
,或者您需要在查询中使用显式to\u CHAR
,即选择to\u CHAR(事务的时间,'YYYY-MM-DD HH24:MI:SS')来自交易
非常感谢您的及时回复。你们太棒了!我的代码已经运行了。嗯。。。数据库如何知道字段是如何排列的?我的意思是,如果我的日期是mm-dd-yyyy,数据库就无法知道它是这样安排的。我这样想对吗?谢谢!现在好多了。:-)哦,我想我误解你了。是的,如果tdate
包含的日期格式不是“MM/dd/yyyy”
这将不起作用。parser.parse()
将引发异常。因此不会执行语句sqlStmt
。
pStmt.setInt(1, 1);
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();