java sql空字段

sko*_*ine 2 java sql

嗨,我正在尝试执行查询

Statement stmt = conn.createStatement();
stmt.executeUpdate(location_query);
Run Code Online (Sandbox Code Playgroud)

location_query是

insert into table(col, col2) value("2", "");
Run Code Online (Sandbox Code Playgroud)

col和col2都是双(12,2)类型,我得到错误 Data truncated for column 'col2' at row 1,但如果我打印我的查询并复制,并将其粘贴到PMA(PhpMyAdmin),它是正确的.

我猜测它的col2的值是空的,但有没有机会以其他方式解决这个问题,而不是检查我试图放入查询的所有变量?

Tim*_*the 5

好吧,空字符串不是有效数字,因此不同的数据库系统可能会以不同的方式处理它.如果您只想将该列设置为NULL或填充默认值,则应将其保留为:

insert into table(col) value(2);
Run Code Online (Sandbox Code Playgroud)

或者明确地将其设置为NULL:

insert into table(col, col2) value(2, NULL);
Run Code Online (Sandbox Code Playgroud)

此外,在SQL中编写的数字没有引号.此外,您应该仅使用PreparedStatements进行协同工作.PreparedStatements为您提供saftly类型并防止SQL注入,并且在重用时可能更快.

看看谷歌"声明与预备声明"

编辑

使用预准备语句时,您的示例看起来像这样:

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();
Run Code Online (Sandbox Code Playgroud)