java.sql.SQLException中:参数索引超出范围(1>参数的数量,这是0).NOT获得如何解决

问题描述:

public UserLoginDTO populateUserDetails(Connection conn, UserLoginDTO user) throws Exception { 

    Log.info("Enter populateUserDetails()"); 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 
    UserLoginDTO userDetail=null; 

    try 
    { 
     pstmt = conn.prepareStatement(QueryConstant.GET_USER_DETAILS.toString()); 
     pstmt.setInt(1, user.getUserId()); 
     //pstmt.setString(1, user.getUserName()); 
     rs = pstmt.executeQuery(); 

     while (rs.next()) { 
      userDetail= new UserLoginDTO(); 
      userDetail.setUserId(rs.getInt("M_USER_ID")); 
      userDetail.setUserTypeID(rs.getInt("USER_TYPE_ID")); 
      userDetail.setUserName(rs.getString("M_USER_NAME")); 
      userDetail.setLoginID(rs.getString("LOGIN_ID")); 
      userDetail.setPassword(rs.getString("PASSWORD")); 
     } 
    } 
    catch (Exception e) 
    { 
     throw new Exception(e.getMessage()); 
    } 
    finally 
    { 
     ConnectionManager.close(null, null, rs, pstmt); 
    } 

    Log.info("Exit populateUserDetails()"); 
    return userDetail; 
} 

java.sql.SQLException中:参数索引超出范围(1>参数数量,为0)。java.sql.SQLException中:参数索引超出范围(1>参数的数量,这是0).NOT获得如何解决

为什么是这样的例外发生,以及如何解决它?

+0

哪行产生错误? – pie3636

+0

public static final StringBuilder GET_USER_DETAILS = new StringBuilder()。 \t追加( “选择UD.M_User_ID,UD.M_User_NAME,UD.PASSWORD,UD.USER_TYPE_ID,UD.M_Login_ID”)。 \t append(“来自M_USER_Master UD,M_USER_TYPE_Master CTM”)。 \t append(“WHERE UD.USER_TYPE_ID = CTM.USER_TYPE_ID”); – Nidhi

+0

@ pie3636在next()执行循环中不会进入 – Nidhi

GET_USER_DETAILS应该包含问号参数时,应更换。

例如,如果GET_USER_DETAILS

"SELECT <...> FROM <...> WHERE UD.USER_TYPE_ID = ?" 

然后,你可以做

pstmt = conn.prepareStatement(QueryConstant.GET_USER_DETAILS.toString()); 
pstmt.setInt(1, user.getUserId()); 

而且在查询中的问号会随着user.getUserId()值替换。

这里您GET_USER_DETAILS显然等于

SELECT UD.M_User_ID,UD.M_User_NAME, UD.PASSWORD, UD.USER_TYPE_ID, UD.M_Login_ID 
FROM M_USER_Master UD, M_USER_TYPE_Master CTM 
WHERE UD.USER_TYPE_ID = CTM.USER_TYPE_ID 

湖中有没有问号,使驾驶员不知道是什么,它可以设置参数,这意味着它不知道该怎么替换为user.getUserId()