如何修复JavaFX注册方法中的No value specified for parameter 2错误
你的代码有两个关键问题导致了这个SQL异常:
1. INSERT语句语法完全错误
你写的SQL字符串只列了第一个字段,未闭合括号且VALUES前多了逗号,正确的INSERT语句需要完整列出所有要插入的字段,语法格式必须严谨。
原错误语句:
String insert = "INSERT INTO " + Const.USERS_TABLE + "(" + Const.USERS_FIRSTNAME + "," + "VALUES(????)";
修正后(需确保Const类中存在对应姓氏、邮箱、密码的常量):
String insert = "INSERT INTO " + Const.USERS_TABLE + "(" + Const.USERS_FIRSTNAME + "," + Const.USERS_LASTNAME + "," + Const.USERS_EMAIL + "," + Const.USERS_PASSWORD + ") VALUES(?,?,?,?)";
注意字段数量要和VALUES中的占位符?数量完全对应。
2. PreparedStatement参数索引重复
你所有setString方法都用了索引1,这会导致只有第一个参数被赋值,第2、3、4个参数完全未设置——这就是报错"No value specified for parameter 2"的直接原因。
原错误代码:
preparedStatement.setString(1,firstName); preparedStatement.setString(1,lastName); preparedStatement.setString(1,email); preparedStatement.setString(1,password);
修正后需按占位符顺序对应索引(从1开始递增):
preparedStatement.setString(1, firstName); preparedStatement.setString(2, lastName); preparedStatement.setString(3, email); preparedStatement.setString(4, password);
完整修正后的方法代码
public void signUpUser(String firstName, String lastName, String email, String password) { String insert = "INSERT INTO " + Const.USERS_TABLE + "(" + Const.USERS_FIRSTNAME + "," + Const.USERS_LASTNAME + "," + Const.USERS_EMAIL + "," + Const.USERS_PASSWORD + ") VALUES(?,?,?,?)"; try { PreparedStatement preparedStatement = getDbConnection().prepareStatement(insert); preparedStatement.setString(1, firstName); preparedStatement.setString(2, lastName); preparedStatement.setString(3, email); preparedStatement.setString(4, password); preparedStatement.executeUpdate(); // 增删改操作推荐用executeUpdate,返回受影响行数更贴合语义 } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者sqlcoder
相关产品推荐
相关产品推荐

