Mysql异常“超出范围”?

Posted

技术标签:

【中文标题】Mysql异常“超出范围”?【英文标题】:Mysql exception"out of range"? 【发布时间】:2014-11-12 09:22:46 【问题描述】:

我正在从事基于摇摆的项目并使用准备好的语句,但它给出了超出范围之类的异常,并且当我使用参数并且不输入“?”时但很简单?然后显示异常,如“ jdbc语法错误检查'?,?'附近的手册在第一行“我很困惑发生了什么。检查我的代码出了什么问题?

private void AddActionPerformed(java.awt.event.ActionEvent evt) 
    if (((JTextField) chose.getDateEditor().getUiComponent()).getText() == null) 
        String sql = "INSERT INTO expance1 ( Breakfast,Date) VALUES (?,?)";
     else 
        String sql = "INSERT INTO expance1 ( Breakfast,Date) VALUES (?,?)";
        try 
            pst = conn.prepareStatement(sql);
            pst.setString(1, breakfast.getText());
            pst.setString(2, ((JTextField) chose.getDateEditor().getUiComponent()).getText());
            pst.executeUpdate(sql);
            JOptionPane.showMessageDialog(null, "insert sucessfully");
         catch (Exception e) 
            JOptionPane.showMessageDialog(null, e);
         finally 
            try 
                rs.close();
                pst.close();

             catch (Exception e) 
            
        
    

【问题讨论】:

请添加该例外。我的意思是整个堆栈跟踪 ofc。 jdbc4.mysqlSyntaxErroException:您的 SQL 语法有错误。请检查与您的 MySql 服务器版本相对应的手册,以便在第 1 行的“?,?)”附近使用正确的语法 在我们为您提供帮助之前,您应该检查以下建议: 1. 名称是否正确(列名和表名)? 2. 列类型是否正确(都必须是 VARCHAR 或类似类型)? 3. .setString() 语句中你们两个方法的返回字符串是你要保存的吗? No Breakfast 是 int 数据类型而 date 是 VARCHAR 而列名和表名是正确的。 现在我将 int 更改为 VARCHAR 但仍然是相同的异常。 【参考方案1】:

替换

 pst.executeUpdate(sql);

通过

pst.executeUpdate();

SQL 查询在准备时已经传递给语句。你不能第二次通过它。传递它会执行文字 SQL 查询,而不是准备好的。

【讨论】:

当在PreparedStatement 上调用executeXXX(String) 方法时,JDBC 驱动程序必须抛出异常。这是 MySQL 中的一个错误,它甚至会尝试实际执行它(这会导致语法错误)。

以上是关于Mysql异常“超出范围”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥此代码显示参数索引超出范围异常? [复制]

MysqlDataTruncation:数据截断:第 1 行列“列”的值超出范围

创建任务时列出索引超出范围异常

从数组中删除重复项时出现超出范围异常

发生索引超出范围异常[重复]

UCanAccess 数据异常:数值超出范围