嗨,我正在尝试执行查询
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的值是空的,但有没有机会以其他方式解决这个问题,而不是检查我试图放入查询的所有变量?
好吧,空字符串不是有效数字,因此不同的数据库系统可能会以不同的方式处理它.如果您只想将该列设置为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)
归档时间: |
|
查看次数: |
2006 次 |
最近记录: |