[英]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.