由于主键和向表中插入值的问题,我收到了令人不安的错误。。。。
在表中,我有3列userName、userPwd和userId(auto_increded主键)
public boolean addUserBean(UserBean ub)
{
Connection conn = null;
PreparedStatement prepar = null;
boolean flag = false;
String sql = "insert into admin values(?,?)";
if (hasUser(ub.getUserName()))
{
return false;
}
try
{
prepar = conn.prepareStatement(sql,prepar.RETURN_GENERATED_KEYS);
prepar.setString(1, ub.getUserName());
prepar.setString(2, ub.getUserPwd());
int result = prepar.executeUpdate();
if (result > 0)
{
flag = true;
}
else
{
flag = false;
}
}
catch (Exception ex)
{
ex.printStackTrace();
}finally{
if (prepar != null) {
try {
prepar.close();
} catch (SQLException logOrIgnore) {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException logOrIgnore) {
}
}
}
return flag;
}
您不应该手动将值插入到自动递增字段中。将其排除在插入查询之外即可。
String sql = "insert into admin(userName, userPwd) values(?,?)";
将自动设置正确的自动递增值。
在OP的更多细节后添加:
如果MySQL抱怨字段"userId"没有默认值,那么您告诉我们的关于表的信息是错误的,并且列userId实际上没有定义为自动递增