列索引无效 - 使用预准备语句删除

时间:2014-07-14 00:21:25

标签: java sql jdbc prepared-statement delete-row

这是代码部分:

public int deleteStatement() throws SQLException {

    Connection conn = null;

    try {
        conn = getConnectivity(conn);
    } catch (SQLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }   

    String sql = "DELETE from USER_DETAILS where USERNAME=?";

    getConnectivity(conn);

    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(4, "rother09");
    int rows = ps.executeUpdate();
    System.out.println(rows + " DELETED");

    return rows;


}
Connection Valid
Connection Valid
java.sql.SQLException: Invalid column index
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
atoracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.jav    a:5360)
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5352)
atcom.platform.BilalsProject.DataAccessUtility.deleteStatement(DataAccessUtility.java:163)
at com.platform.BilalsProject.DataAccessUtility.main(DataAccessUtility.java:40

我试图从我的表中删除并且它一直给我“无效的列索引”,无法看到我出错的地方。

在我的数据库中,我将第4列作为密码,将第5列作为用户名。代码在sql工作表中运行良好。

1 个答案:

答案 0 :(得分:0)

为什么getConnectivity(conn);在同一方法中两次

的第一件事

其次是您的查询 String sql = "DELETE from USER_DETAILS where USERNAME=?";接受一个参数 所以在这种情况下你的ps.setString(4, "rother09");

应该改为

ps.setString(1, "rother09");

请注意setString(int parameterIndex, String x)并不意味着你的列索引它实际上意味着查询中使用的参数索引,假设你查询就像

SELECT * from USER_DETAILS WHERE USERNAME=? AND PASSWORD = ?

然后

ps.setString(1, "rother09");// for the first parameter i.e USERNAME
ps.setString(2, "password");// for the second parameter i.e PASSWORD