使用 DELETE 语句截断不正确的 DOUBLE 值
Posted
技术标签:
【中文标题】使用 DELETE 语句截断不正确的 DOUBLE 值【英文标题】:Truncated incorrect DOUBLE value using DELETE statement 【发布时间】:2021-08-06 04:47:41 【问题描述】:int d1;
String attribute = comboBox1.getSelectedItem().toString(); // a combo box
System.out.println(attribute);
String data = t.getText(); // a textfield
System.out.println(data);
if (attribute.equals("COURSE_ID"))
IsNumber in = new IsNumber();
d1 = in.stringToInt(data);
try
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("connection success!!");
String sql = "DELETE FROM course WHERE ? = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, attribute);
statement.setInt(2, d1);
boolean rows = statement.execute();
if (rows == true)
new ViewDatabase(user, name, pswrd);
System.out.println("COURSE_ID UNIT UPDATE SUCCESSFUL!");
frame.setVisible(false);
else if (rows == false)
JOptionPane.showMessageDialog(null, "Cannot find row!",
"ERROR", JOptionPane.ERROR_MESSAGE);
statement.close();
connection.close();
catch (SQLException e)
System.out.println("& i oop");
e.printStackTrace();
对于这段代码,每当我尝试运行它时,它都会返回“数据截断:截断不正确的 DOUBLE 值:'COURSE_ID'”。我不确定这是指什么,我搜索并发现有人说此错误消息具有误导性,尽管我只找到了选择、插入和更新的答案,但没有找到删除的答案。
我还按照互联网上的建议关闭了 mysql 中的严格模式,但无济于事。
【问题讨论】:
代码中哪一行报错? @Chetan 错误可能发生在调用execute()
。
【参考方案1】:
您不能将字符串绑定到准备好的语句中的实际列名。因此,属性列名称必须是硬编码的。一种可能有效的模式是:
String sql = "";
if ("COL1".equals(attribute))
sql = "DELETE FROM course WHERE COL1 = ?";
else if ("COL2".equals(attribute))
sql = "DELETE FROM course WHERE COL2 = ?";
else
sql = "DELETE FROM course WHERE COL3 = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, d1);
boolean rows = statement.execute();
【讨论】:
以上是关于使用 DELETE 语句截断不正确的 DOUBLE 值的主要内容,如果未能解决你的问题,请参考以下文章
错误号:1292 在我的 SQL 错误中截断了不正确的 DOUBLE 值