2014-05-17 57 views
1

所以我有一個更新MS Access 2007表中的某些字段的方法,每當我嘗試更新時,我得到以下異常: java.sql.SQLException: [Microsoft] [ODBC Microsoft Access Driver]參數太少。預計11個。 它總是顯示預計會比查詢中多一個。更新聲明Java的sql例外:太多的參數預計一個

該方法的代碼是:

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; 
    } 

我沒有使用別名,這樣似乎並不就是爲什麼駕駛員所期望的附加參數的原因。所有列名拼寫正確,三重檢查。

+0

'i.getSifraIzlagaca()'不會返回問號,對不對? – yankee

+0

不,它會返回一個正常的字符串和正確的值。 – Matija

+1

爲什麼不使用'... WHERE SifraIzlagaca =?'和'pstmt.setString(11,i.getSifraIzlagaca());'? –

回答

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()); 
+0

是的,我意識到,經過上面的評論,並糾正它,現在工作正常,謝謝:) – Matija