我想在sql server中插入记录。表名和列在此代码中指定,
String str_date=date;
DateFormat formatter ;
formatter = new SimpleDateFormat("MM/dd/yyyy");
date1 = (Date)formatter.parse(str_date);
System.out.println("Today is " +date1 );
try{
String query="INSERT INTO BULT_DATA " +
"(ULDT_ID" +
",ULDT_DESC" +
",ULDT_DT" +
",ULDT_ULTH_ID" +
",ULDT_DATA_FILE" +
",ULDT_MAX_ROW_NO" +
",ULDT_REC_STS" +
",ULDT_CRE_USER_ID" +
",ULDT_CRE_DT" +
",ULDT_UPD_USER_ID" +
",ULDT_UPD_DT" +
",ULDT_APRV_USER_ID" +
",ULDT_APRV_DT)" +
"VALUES ('"+
uploadID+"','"+
uploadDes+"','"+
date1+"','" +
templateID+"','"+
dataFile+"','"+
noRows+"','" +
"N','" +
"admin','" +
"2011-12-05 18:41:50.000','" +
"admin','" +
"2011-12-05 18:41:50.000','" +
"NULL','" +
"NULL')";
System.out.println("query :: "+query);
int stmnt= stmt.executeUpdate(query);
}catch (Exception e) {
e.printStackTrace();
}
但我得到了这个例外
com.microsoft.sqlserver.jdbc.SQLServerException:从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:6)
首先,只有美国人使用延迟MM-DD-YYYY
格式作为日期 - 每个人/所有其他人,尤其是数据库,都使用ISO格式YYYY-MM-DD
。
其次,如果您按原样使用JDBC,则不必担心。您可以继续使用延迟格式,因为JDBC驱动程序将处理将对象格式化为SQL。
第三种(这是次要的),对于插入更喜欢stmt.execute()
而不是stmt.executeUpdate()
- 插入不是更新,而是插入。虽然,将使用其中任何一个。
总而言之,你得到这样的东西(例如):
String sql = "insert into table (int_col, date_col, boolean_col, text_col)" +
" values (?, ?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setObject(1, 7);
statement.setObject(2, new Date());
statement.setObject(3, true);
statement.setObject(4, "hello");
statement.execute();
注意:
?
statement.setObject(n, object)
JDBC驱动程序将为所有“常用”java对象执行所有必要的转换和格式化,特别是如果该列/数据类型需要引号,则将值括在引号中。
您可以改变自己的代码,以我在此处演示的方式工作。
答案 1 :(得分:2)
Use an ISO or ODBC date format表示所有值。
或旧版SQL Server yyymmdd hh:nn:ss
MM/dd/yyyy
不安全,您为UPD_DT和ULDT_CRE_DT提供的常量也不安全
'19980223 14:23:05'
{ts '1998-02-23 14:23:05'}
{d '1998-02-23'}
'1998-02-23T14:23:05'
您是否听说过SQL注入,通常是由使用字符串连接构建SQL命令引起的
答案 2 :(得分:0)
您的date1对象将使用toString()
的标准java.lang.Date
表示格式化,这不太可能与JDBC驱动程序支持的各种日期格式兼容。
而是使用另一个SimpleDateFormat对象将date1
格式化为SQL Server默认日期格式,然后再将其附加到查询中。
另外,请帮自己一个忙,阅读PreparedStatements和paramaterised查询;他们真的让这种东西更容易。