【发布时间】: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 驱动程序 :)
标签: java sql ms-access jdbc odbc