Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用字符串变量将自定义日期和当前时间插入Oracle数据库_Java_Database_Oracle_Jdbc_Prepared Statement - Fatal编程技术网

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

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.

因此,我要做的是将自定义日期和当前时间一起设置到Oracle数据库中的日期类型中。 我以mm/dd/yyyy的形式从textField获取字符串

 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();