jdbc试图用空参数从mysql数据库检索salt

monwx1rj  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(289)

这个问题在这里已经有答案了

preparedstatement忽略查询中的参数:java.sql.sqlexception:参数索引超出范围(1>参数数,即0)[重复](2个答案)
java.sql.sqlexception参数索引超出范围(1>参数个数,为0)[已关闭](2个答案)
准备好的声明(2个答案)
两年前关门了。
我有一个jdbc方法从用户那里检索salt,以便在登录时验证用户。
我的方法是:

public static byte[] getSaltMethod(String username) throws SQLException, LoginSampleException {

    try {

        Connection con = Connector.connection();

        String SQL = "SELECT salt FROM users WHERE email = '?'";

        PreparedStatement statement = con.prepareStatement(SQL);
        statement.setString(1, username);

        ResultSet set = statement.executeQuery();

        while (set.next()) {

            byte[] salt = set.getBytes("salt");

            /* jeg er i tivil om denne skal være her*/

            return salt;
        }

    } catch (SQLException ex) {
        Conf.MYLOGGER.log(Level.SEVERE, null, ex);
        throw new LoginSampleException(ex.getMessage());
    }
    return null;

}
}

我已使用调试器尝试识别问题,并收到此错误消息

"Parameter index out of range (1 > number of parameters, which is 0)."

我试过在参数前后加上和不加'around',但是它给了我一个语法错误。

xu3bshqb

xu3bshqb1#

您的sql不应包含 ' (绑定)参数周围的字符。
preparedstatement将自动添加字符
将sql更改为:

String SQL = "SELECT salt FROM users WHERE email = ?";

相关问题