在Oracle表中插入日期

时间:2014-03-29 06:40:49

标签: java oracle jdbc

我设法连接到Oracle数据库以进行快速版本。我创建了一个表:

CREATE TABLE out_patient 
( 
     patient_id    NUMBER(8) PRIMARY KEY, 
     first_name    VARCHAR2(20), 
     last_name     VARCHAR2(20), 
     gender        VARCHAR2(10), 
     mobile_number NUMBER(12), 
     address       VARCHAR2(20), 
     date_of_birth DATE, 
     date_of_entry DATE 
); 

现在我有一个表单来填写所有这些细节但是,我得到了一个 sqlexception:

  

ORA-01861:文字与格式字符串

不匹配

你能说出导致它的原因吗?我是否以错误的格式输入数据?我想这可能是由于2个日期Date_Of_Birth和Date_Of_Entry。 在我的JDBC代码中,我这样做:

String t1=text_dob.getText(); 
String t2=text_doe.getText(); 

然后,

st.setStrin(7,t1); 
st.setString(8,t2); 

请让我知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

您需要在setDate()上致电setString而不是PreparedStatement

st.setDate(7, new java.sql.Date(System.currentTimeMillis())); 
st.setDate(8, new java.sql.Date(System.currentTimeMillis()));
st.setTimestamp(1, new Timestamp(System.currentTimeMillis()));

您遇到问题的原因是您的DDL列设置为Date,因此Oracle预计Date值,但您发送VARCHAR值。

时间戳:请参阅types mapping

  

java.sql.Date for SQL DATE信息。小时,分钟,秒和   应将java.util.Date基类的毫秒字段设置为   零。如果提供给java.sql.Date的毫秒数   构造函数为负数,驱动程序将计算日期为   1970年1月1日之前的毫秒数。否则,日期是   计算为1月1日后指定的毫秒数,   1970。

     

用于SQL TIME信息的java.sql.Time。年,月和日   java.util.Date基类的字段设置为1970年1月和   这是Java时代的“零”日期。

     

用于SQL TIMESTAMP信息的java.sql.Timestamp。这个课程延伸   java.util.Date通过添加纳秒字段。

答案 1 :(得分:0)

这假设您在GUI字段中输入的日期采用“dd / MM / yyyy”格式。如果不同,请相应调整SimpleDateFormat中的模式..

SimpleDateFormat sdf = new SimpleDateFomat("dd/MM/yyyy");
st.setDate(7,new java.sql.Date(sdf.parse(text_dob.getText()).getTime()));
st.setDate(8,new java.sql.Date(sdf.parse(text_doe.getText()).getTime()));

如果您的GUI字段包含日期和时间,例如“31/01/2014 23:59:59”,则SimpleDateFormat中的相应模式为“dd / MM / yyyy HH:mm:ss”。您可以阅读完整格式的SimpleDateFormat文档。

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html