我正在尝试将信息输入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.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'))
);
我对此很新,在网上找不到类似的问题。任何帮助将不胜感激!
答案 0 :(得分:2)
我对查看代码后出现的错误感到相当惊讶,但错误消息有时会产生误导或模糊,不知道该怎么想!但我想我可以帮忙......
首先,您尝试将 String 值放入 Date 列:
ps.setString(9, date);
应该:
ps.setDate(9, date);
当然在这一点上,变量“date”仍然是一个String变量......这是不会做的!
您必须将包含日期的字符串转换为 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());
为了使用SimpleDateFormat()
函数,您需要在其他import语句中添加以下行(如果它还没有):
import java.text.DateFormat;
这应该可以解决问题。当然,如果区域设置或您在String中具有日期的格式不同,则需要在SimpleDateFormat()
函数的参数中调整该信息。
此外,您可能希望将名为date
的变量(即使它不是Java保留字)更改为能够清楚它是什么类型的日期...类似于:{ {1}},createDate
,updateDate
。
在路上,花点时间考虑一下变量,类等的命名,清晰明确!除了使代码更清晰易懂之外,您不会有可能意外地尝试使用保留字或现有类的名称等。
答案 1 :(得分:1)
我冒险使用您的Java代码,您的数据库和您的用户不同意正确格式化的日期应该是什么样子。要验证这一点,请在致电Connection.prepareStatement()
时设置断点,并检查date
和dobt
的值。
我建议更改第一个代码块中的行
String dobt = id_text.getText();
String date = date_text.getText();
到
java.text.DateFormat formatter = java.text.DateFormat.getDateInstance()
java.util.Date dobt = formatter.parse(
java.util.Date date = formatter.parse(date_text.getText());
并在第二个区块中使用
ps.setDate(3, dobt);
ps.setDate(9, date);
阅读DateFormat
课程,了解有关解析日期的更多信息。
此外,编码后,我想知道你是否打算从dobt
中提取id_text
?