这是代码部分:
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工作表中运行良好。
答案 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