Java ORA-01847月日必须介于1和月的最后一天之间-将日期插入Oracle数据库
我试图将信息输入java程序并将其存储在oracle数据库中。但我在尝试输入日期数据时出错。 这是我试图发送的数据:Java ORA-01847月日必须介于1和月的最后一天之间-将日期插入Oracle数据库,java,sql,oracle,netbeans,Java,Sql,Oracle,Netbeans,我试图将信息输入java程序并将其存储在oracle数据库中。但我在尝试输入日期数据时出错。 这是我试图发送的数据: int id = Integer.parseInt(id_text.getText()); String name = name_text.getText(); String dobt = id_text.getText(); String address = addr_text.getText(); int number = Integer.pa
int id = Integer.parseInt(id_text.getText());
String name = name_text.getText();
String dobt = id_text.getText();
String address = addr_text.getText();
int number = Integer.parseInt(num_text.getText());
String gender = gender_text.getText();
int club = Integer.parseInt(club_text.getText());
int county = Integer.parseInt(county_text.getText());
String date = date_text.getText();
String type = type_text.getText();
我将数据输入文本字段,并将数据存储在上述变量中。然后,我尝试使用一个preparedStatement将这些变量值发送到我的表中,如下所示:
ps = conn.prepareStatement("INSERT INTO player VALUES(?,?,?,?,?,?,?,?,?,?)");
ps.setInt(1, id);
ps.setString(2, name);
ps.setString(3, dobt);
ps.setString(4, address);
ps.setInt(5, number);
ps.setString(6, gender);
ps.setInt(7, club);
ps.setInt(8, county);
ps.setString(9, date);
ps.setString(10, type);
int i = ps.executeUpdate();
以下是我试图插入的表:
CREATE TABLE player
(
member_id INT PRIMARY KEY NOT NULL,
member_name VARCHAR2(70) NOT NULL,
date_of_birth DATE,
member_address VARCHAR2(300),
contact_number INT NOT NULL,
gender VARCHAR2(1) NOT NULL CHECK(gender IN('f','m')),
club_seeding INT NOT NULL,
county_seeding INT NOT NULL,
renewal_date DATE,
m_type VARCHAR(9) NOT NULL CHECK(m_type IN('junior','student', 'senior', 'family', 'associate'))
);
我是个新手,在网上找不到类似的问题。任何帮助都将不胜感激 我敢说,您的Java代码、您的数据库和您的用户对正确格式的日期应该是什么样子没有达成一致意见。要验证这一点,请在调用
Connection.prepareStatement()
时设置断点,并检查date
和dobt
的值
我建议更改第一个代码块中的行
String dobt = id_text.getText();
String date = date_text.getText();
到
在第二个街区使用
ps.setDate(3, dobt);
ps.setDate(9, date);
阅读本课程,了解有关解析日期的更多信息
此外,在编写代码之后,我想知道您是否打算从
id\u text
中提取dobt
?我对您在查看代码后出现的错误感到相当惊讶,但错误消息有时可能会产生误导,或者非常模糊,您不知道该怎么想!但我想我能帮上忙
首先,您尝试将字符串值放入日期列:
应该是:
当然在这一点上,变量“date”仍然是一个字符串变量。。。那不行
您必须将包含日期的字符串转换为SQL日期数据类型(Java日期数据类型也不起作用)
那么,你的路线是:
String date = date_text.getText();
替换为:
DateFormat df = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
java.sql.Date date = (java.sql.Date)df.parse(date_text.getText());
要使用SimpleDataFormat()
函数,需要将以下行与其他导入语句一起添加(如果尚未添加):
这应该能奏效。当然,如果区域设置或字符串中日期的格式不同,则需要在函数的参数中调整该信息
此外,您可能希望将名为:date
(即使它不是Java保留字)的变量更改为可以清楚显示它是哪种日期的变量。。。类似于:createDate
,updateDate
,生日
接下来,花一点额外的时间考虑变量、类等的命名是值得的。清晰!除了使代码更清晰易懂之外,您不可能意外地尝试使用保留字或现有类的名称,等等。请提供表结构…我想是Datetime,单位是DBDATETIME您为DATE\u OF_BIRTH和RENEWAL\u DATE输入的值是什么?Im使用YYYY MM DDIm格式获取此错误:未报告异常ParseException;必须捕获或声明在以下行中抛出:java.util.Date Date=formatter.parse(Date_text.getText());我想是Java新手吧。您需要仔细阅读异常处理,但现在需要在包含上述代码的函数中添加一个
throws ParseException
。您最终还需要捕获该异常,可能是在捕获JDBC函数抛出的SQLExceptions的任何地方
ps.setDate(9, date);
String date = date_text.getText();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
java.sql.Date date = (java.sql.Date)df.parse(date_text.getText());
import java.text.DateFormat;