我设法连接到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);
请让我知道我做错了什么。
答案 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