繁体   English   中英

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

[英]Invalid column index - Delete, using prepared statements

这是代码部分:

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工作表中正常工作。

首先,为什么要使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM