使用 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 值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 截断不正确的 DOUBLE 值?

错误号:1292 在我的 SQL 错误中截断了不正确的 DOUBLE 值

“oracle ”截断表是啥意思?

我收到错误“DELETE 语句与 REFERENCE 约束冲突”

截断不正确的日期值

若有说明:“double a;”,则正确的输入语句应该是( )