如何解决如果列之一是使用准备好的语句自动递增,如何在mysql数据库中插入值
public String put(){
this.query = "INSERT INTO user_registration VALUES('default','?','?' );";
try {
PreparedStatement stmt= Main.connection.prepareStatement(query);
stmt.setString(1,this.fullname);
stmt.setString(2,this.username);
stmt.setString(3,this.password);
stmt.setString(4,this.email);
stmt.setString(5,this.contact);
stmt.executeUpdate();
return String.valueOf(SignupStatus.SUCCESS);
} catch (sqlException e) {
e.printstacktrace();
System.out.println(e);
return String.valueOf(SignupStatus.Failed);
}
}
我遇到此异常:
java.sql.sqlException: Parameter index out of range (1 > number of parameters,which is 0).
at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:129)
at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:97)
at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:89)
at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:63)
at com.MysqL.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1372)
at com.MysqL.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1385)
at com.MysqL.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1752)
at client_shareNow.Signup.put(Signup.java:29)
at client_shareNow.Client_Request.run(Client_Request.java:40)
at java.base/java.lang.Thread.run(Thread.java:832)
java.sql.sqlException: Parameter index out of range (1 > number of parameters,which is 0).
请帮助我纠正代码。
解决方法
不能将?
占位符括在单引号内。
另外,在您的语句中包括将接收每个提供的值的列名也是一个好习惯。
如果第一列是自动递增列,则应从列表中忽略它,因为它的值将由MySql提供:
this.query = "INSERT INTO user_registration(fullname,username,password,email,contact) VALUES (?,?,?);";
将列名称更改为实际名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。