我使用的是sql server 2012,我正在执行一个允许用户注册和登录的java程序。但是,在用户登录或注册后,他们应该能够向表中添加更多信息。但我一直得到一个空值。我的表有4个字段。。。用户名(主键),密码,电子邮件,个人信息。我希望用户能够在登录或注册后添加到"个人信息"字段
//adding a user
public void addUser(User user)
{
try{
makeConnection();
Statement s = con.createStatement();
s.execute("INSERT INTO Person VALUES('"+user.getUserName()+"','"+user.getPassword()+"','"+user.getEmail()+"','"+user.getSlang()+"')");
}
catch(SQLException ex){
xc=false;
JOptionPane.showMessageDialog(null,"The LoginID & or email already exists, n please type a different loginID and password",
"Error",JOptionPane.ERROR_MESSAGE);
//System.out.println("Error.......");
ex.printStackTrace();
}
}
这是我在Sql中的表创建表Person(loginID varchar(30)主键不为空,密码varchar(15),电子邮件varchar(30)是唯一的,Slang varchar(128),/定义varchar(200)/)在用户登录或登录后,我的gui转到另一个框架,该框架允许用户输入更多我想添加到俚语列中的信息,但我一直为null。是否可以将其从null更新。
public void addInfo(User info) {
try{
makeConnection();
Statement s = con.createStatement();
String sp = ("UPDATE Person SET Slang = '"+info.getSlang()+"' where loginID='"+info.getUserName()+"' ");
s.executeUpdate(sp);
}
catch(SQLException ex){
xc = false;
JOptionPane.showMessageDialog(null,"Slang already added, n please type a different loginID and password",
"Error",JOptionPane.ERROR_MESSAGE);
//System.out.println("Error.......");
ex.printStackTrace();
}
}
首先是使用PreparedStatement的强制性建议。它正确地转义单引号和其他特殊字符,并防止SQL注入。
String sql = "INSERT INTO Person (loginID, password, email)"
+ " VALUES(?, ?, ?)";
try (PreparedStatement s = con.prepareStatement(sql)) {
s.setString(1, user.getUserName());
s.setString(2, user.getPassword());
s.setString(3, user.getEmail());
int updateCount = s.executeUpdate();
}
语句应该是关闭的,为此可以使用try-with-resources语法,始终关闭。如果插入了记录,则updateCount
应为1。
对错误;如果枚举列名,代码不会在将来的表更改时立即中断,但也可能将空字段排除在外(通常,如果列没有约束NOT null,则可以填写null。)
然而,您似乎在说,UPDATE给出了一个与NULL相关的错误。在这种情况下,它只能是包含null的User info
。也许您可以给出更详细的错误信息。或者追踪数值;信息及其字段。就我们目前所知,即使是这种联系也可能是罪魁祸首。