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异常“超出范围”?的主要内容,如果未能解决你的问题,请参考以下文章