PSQLException索引超出范围

时间:2018-02-12 21:20:56

标签: java postgresql jdbc

我无法弄清楚为什么我的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_mailnew_mailid

但我在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错误?

0 个答案:

没有答案