0

我输入了以下代码。我的目标是以 dd/MM/yyyy 格式在 mySQL 中存储日期。但是mySQL一般取yyyy/MM/dd。

    String d=(((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText()); 
    Statement stmt = db.conn.createStatement(); 
    String sql = "insert into diag.current " +     
                 "values'"+col1+"','"+col2+"','"+java.sql.Date.valueOf(d)+"','"+col4+"')";    
    stmt.executeUpdate(sql);

我右键单击 jDateChooser1 并单击自定义代码,然后输入:

jDateChooser1= new com.toedter.calendar.JDateChooser("dd/MM/yyyy","##/##/####",'_');

现在请让我知道我在哪里犯了错误。如果有人解决这个问题,我将不胜感激。提前致谢。我希望我描绘得清楚...

4

3 回答 3

2

应该是这样的,如下所示。更好地列出列名,以便将来更改表并提高可读性。A(在您的代码中迷路了。使用准备好的语句转义字符串并防止 SQL 注入。对于日期、整数等也是有益的。

java.sql.Date date = new java.sql.Date(SimpleDateFormat("dd/MM/yyyy").parse(d).getTime());

PreparedStatement stmt = db.conn.createPreparedStatement(); 
String sql = "INSERT INTO diag.current (COL1, COL2, COL3, COL4) VALUES(?, ?, ?, ?)";
PreparedStatement stmt = db.conn.createPreparedStatement();`
stmt.setString(1, col1);
stmt.setString(2, col2);
stmt.setDate(3, date);
stmt.setString(4, col4);
stmt.executeUpdate();
stmt.close();

我使用您的帮助编辑了我的程序,如下所示:

java.sql.Date date = new java.sql.Date(SimpleDateFormatter("dd/MM/yyyy").parse(d).getTime());
PreparedStatement stmt = db.conn.prepareStatement(); 
String sql = "INSERT INTO diag.current (name, patientID, address, sex, phone, vip, email, purpose, history, tests, doc, charges, status, dob, nextapp) " +     
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";    
PreparedStatement stmt = db.conn.createPreparedStatement(); 
stmt.setString(1, name);
stmt.setString(2, id);
stmt.setString(3, add);
stmt.setString(4, sex);
stmt.setString(5, ph);
stmt.setString(6, vip);
stmt.setString(7, mail);
stmt.setString(8, pur);
stmt.setString(9, phis);
stmt.setString(10, tests);
stmt.setString(11, dc);
stmt.setInt(12, total);
stmt.setString(13, status);
stmt.setDate(14, date);
stmt.setDate(15, date);
stmt.executeUpdate();
stmt.close();

问:但是不支持,我应该使用哪个导入SimpleDateFormattercreatePreparedStatement

A:错别字,应该是

java.text.SimpleDateFormat
con.prepareStatement
于 2013-07-23T11:49:17.933 回答
0
dateChooserDialog1.showDialog(this.getFrame());
Calendar d=dateChooserDialog1.getSelectedDate();

SimpleDateFormat sdf=new SimpleDateFormat("DD-MM-YYYY");
String s=d.toString();
String dd=s;
String mm=s;
String yyyy=s;
int i=dd.lastIndexOf("DAY_OF_MONTH");
dd=dd.substring(i+13,i+16);
dd=dd.substring(0,dd.lastIndexOf(","));

int j=mm.indexOf("MONTH");
mm=mm.substring(j+6,j+9);
mm=mm.substring(0,mm.lastIndexOf(","));
j=Integer.parseInt(mm);
mm=String.valueOf(j+1);

int z=yyyy.indexOf("YEAR");
yyyy=yyyy.substring(z+5,z+10);
yyyy=yyyy.substring(0,yyyy.lastIndexOf(","));

//s.substring(busyIconIndex, busyIconIndex);

String dob=dd+"/"+mm+"/"+yyyy;
DateField.setText(dd+"/"+mm+"/"+yyyy);
于 2014-07-16T05:02:39.953 回答
0

来自 MySQL 手册 - 11.3.1。DATE、DATETIME 和 TIMESTAMP 类型

DATE 类型用于具有日期部分但没有时间部分的值。MySQL 以 'YYYY-MM-DD' 格式检索和显示 DATE 值。支持的范围是“1000-01-01”到“9999-12-31”。

DATETIME 类型用于同时包含日期和时间部分的值。MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索和显示 DATETIME 值。支持的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

TIMESTAMP 数据类型用于同时包含日期和时间部分的值。TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。

MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。(这不会发生在其他类型,例如 DATETIME。)默认情况下,每个连接的当前时区是服务器的时间。

MySQL 允许将值指定为字符串的“宽松”格式,其中任何标点字符都可以用作日期部分或时间部分之间的分隔符。例如 YYYY/MM/DD 可以作为 DATE。

因此,您似乎必须创建一个 YYYY-MM-DD 格式的文本日期才能将日期插入 MySQL。当您检索 DATE 字段时,您会得到 YYY-MM-DD。

当您使用 setDate 方法时,PreparedStatement 应该为您从 java.sql.Date 执行此转换。

于 2013-07-23T12:49:30.607 回答