更新语句Java sql异常:期望的参数太少
Posted
技术标签:
【中文标题】更新语句Java sql异常:期望的参数太少【英文标题】:update statement Java sql exception: Too few parameters expected one more 【发布时间】:2014-05-17 12:36:27 【问题描述】:所以我有一种方法可以更新 MS Access 2007 表中的某些字段,每当我尝试更新时,都会出现以下异常: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 参数太少。预计11。 它总是显示比查询中的预期多一个。
方法的代码是:
try
String upit = "UPDATE Izlagac SET NazivIzlagaca=?, PIB=?, Telefon=?, "
+ " KontaktOsoba=?, Email=?, TipIzlagaca=?, Ulica=?, Broj=?, Mesto=?, Drzava=? WHERE "
+ " SifraIzlagaca = " + i.getSifraIzlagaca() + ";";
PreparedStatement pstmt = con.prepareStatement(upit);
pstmt.setString(1, i.getNazivIzlagaca());
pstmt.setString(2, i.getPIB());
pstmt.setString(3, i.getTelefon());
pstmt.setString(4, i.getKontaktOsoba());
pstmt.setString(5, i.getEmail());
pstmt.setString(6, i.getTipIzlagaca());
pstmt.setString(7, i.getUlica());
pstmt.setString(8, i.getBroj());
pstmt.setString(9, i.getMesto());
pstmt.setString(10, i.getDrzava());
System.out.println(pstmt.toString());
pstmt.executeUpdate();
pstmt.close();
return true;
catch (SQLException ex)
Logger.getLogger(DBBroker.class.getName()).log(Level.SEVERE, null, ex);
return false;
我没有使用别名,所以这似乎不是驱动程序期望附加参数的原因。所有列名拼写正确,三重检查。
【问题讨论】:
i.getSifraIzlagaca()
不会碰巧返回问号,对吧?
不,它返回一个正常的字符串和正确的值。
为什么不使用... WHERE SifraIzlagaca = ?
和pstmt.setString(11, i.getSifraIzlagaca());
?
我没有看到 i.getSifraIzlagaca() 实际上是用引号括起来的!从未使用过 MS Access,但字符串参数不应该在标准 SQL 中引用吗?
Anirban Basak,是的,它不是,但是当你包装它时,它会引发数据错误类型异常。 Gord,谢谢,它现在可以工作了,这是一个简单而优雅的解决方案,从现在开始我会这样做.. :) 虽然它也应该这样工作,但那是邪恶的 Microsoft 驱动程序 :)
【参考方案1】:
无需使用字符串连接来构建 WHERE 子句;参数在那里和在 PreparedStatement 的其他部分一样有效。所以,只需使用
String upit = "UPDATE Izlagac SET NazivIzlagaca=?, PIB=?, Telefon=?, "
+ " KontaktOsoba=?, Email=?, TipIzlagaca=?, Ulica=?, Broj=?, Mesto=?, Drzava=? WHERE "
+ " SifraIzlagaca=?";
PreparedStatement pstmt = con.prepareStatement(upit);
pstmt.setString(1, i.getNazivIzlagaca());
pstmt.setString(2, i.getPIB());
pstmt.setString(3, i.getTelefon());
pstmt.setString(4, i.getKontaktOsoba());
pstmt.setString(5, i.getEmail());
pstmt.setString(6, i.getTipIzlagaca());
pstmt.setString(7, i.getUlica());
pstmt.setString(8, i.getBroj());
pstmt.setString(9, i.getMesto());
pstmt.setString(10, i.getDrzava());
pstmt.setString(11, i.getSifraIzlagaca());
【讨论】:
是的,我意识到,经过上面的 cmets 并更正后,它现在可以正常工作了,谢谢 :)以上是关于更新语句Java sql异常:期望的参数太少的主要内容,如果未能解决你的问题,请参考以下文章
java jdbc 删除数据库表中一列后不能用SQL语句在更新和查询表中其他数据了
使用准备好的语句时出现 Camel -Spring SQLException