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获得如何解决
为什么是这样的例外发生,以及如何解决它?
答
你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()
哪行产生错误? – pie3636
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
@ pie3636在next()执行循环中不会进入 – Nidhi