您好我正在尝试执行查询
Statement stmt = conn.createStatement();
stmt.executeUpdate(location_query);
location_query是
insert into table(col, col2) value("2", "");
col和col2都是double(12,2)类型,我得到错误
Data truncated for column 'col2' at row 1
,但如果我打印我的查询并复制,并将其粘贴到PMA(PhpMyAdmin),那就是正确的。
我猜测它的col2的值是空的,但有没有机会以其他方式解决这个问题,而不是检查我试图放入查询的所有变量?
答案 0 :(得分:5)
嗯,空字符串不是有效数字,因此不同的数据库系统可能会以不同的方式处理它。如果您只想将该列设置为NULL或填充默认值,则应将其保留为:
insert into table(col) value(2);
OR显式设置为NULL:
insert into table(col, col2) value(2, NULL);
此外,在SQL中编写的数字没有引号。此外,您应该仅使用PreparedStatements进行cosider。 PreparedStatements为您提供saftly类型并防止SQL注入,并且在重用时可能更快。
查看google "statement vs. preparedstatement"
修改强>
使用预准备语句时,您的示例将如下所示:
String yourFirstString = "2.34";
String yourSecondString = "";
double yourFirstDouble = 0;
double yourSecondDouble = 0;
if(yourFirstString != null && yourFirstString.trim().length() > 0){
try {
yourFirstDouble = Double.parseDouble(yourFirstString);
}catch(NumberFormatException e){
// handle Exception here
}
}
// same parsing for the second double
PreparedStatement stmt = conn.prepareStatement("insert into table (col, col2) value(?, ?)");
stmt.setDouble(1, yourFirstDouble);
stmt.setDouble(2, yourSecondDouble);
stmt.executeUpdate();