2014-07-14 3 views
0

이 코드 섹션 : 내 테이블에서 삭제하려고잘못된 열 인덱스 - 준비된 문을 사용하여 삭제

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
getConnectivity(conn);가 두 번 같은 방법으로

String sql = "DELETE from USER_DETAILS where USERNAME=?"; 그래서 그 경우에 하나 개의 매개 변수 에 걸리는 두 번째 쿼리가 ps.setString(4, "rother09");

ps.setString(1, "rother09"); 

참고로 변경해야하는 이유

우선 그것은 그 setString(int parameterIndex, String x)은 실제로 열 인덱스를 의미하지는 않습니다. 쿼리에 사용 된 매개 변수의 인덱스를 의미합니다. uery 그런 다음

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 
같다
관련 문제