我无法弄清楚为什么我的PreparedStatement会抛出错误。
这是我的功能:
public boolean updateMail(int id, String new_mail, boolean showMail) {
String login = "";
String toUpdate = "";
boolean ret = false;
try {
req = cnx.prepareStatement("SELECT login FROM compte WHERE id = ?");
req.setInt(1, id);
ResultSet rs = req.executeQuery();
if (rs.next()) login = rs.getString(1);
} catch (SQLException e) {
e.printStackTrace();
}
if (!getDestinataire(login).equals(new_mail))
toUpdate = ", new_mail=?";
String reqq = "UPDATE compte SET show_mail=?" + toUpdate + " WHERE id=?";
System.out.println("Dest : " + getDestinataire(login) + "\nnew_mail : " + new_mail + "\ntoUpdate : " + toUpdate
+ "\nreqq : " + reqq);
try {
req = cnx.prepareStatement(reqq);
req.setBoolean(1, showMail);
if (!getDestinataire(login).equals(new_mail)) {
req.setString(2, new_mail);
}
req.setInt(2 + (getDestinataire(login).equals(new_mail) ? 0 : 1), id);
req.executeUpdate();
ret = true;
} catch (SQLException e) {
e.printStackTrace();
}
return ret;
}
getDestinataire()
方法效果很好。我打印出的痕迹如下所示:
目的地:example@example.com new_mail:example2@example2.com toUpdate :, new_mail =? reqq:UPDATE compte SET show_mail =?,new_mail =? WHERE id =?
所以基本上我有3列:show_mail
,new_mail
和id
。
但我在req.setString(2, new_mail);
处发生错误:
org.postgresql.util.PSQLException: L'indice de la colonne est hors limite : 2, nombre de colonnes : 1.
我尝试使用和不使用req.close()
因为我通常不使用它而且它总是很好用。
此外,这是变量定义:
private Connection cnx;
private PreparedStatement req;
我已经写了一百个数据库调用。这是一个愚蠢的错误,我太盲目无法看到或是否有lib错误?