java sql空字段

时间:2011-06-01 09:38:13

标签: java sql

您好我正在尝试执行查询

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的值是空的,但有没有机会以其他方式解决这个问题,而不是检查我试图放入查询的所有变量?

1 个答案:

答案 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();