我正在使用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中的表 创建表人 ( loginID varchar(30)主键不为null, password varchar(15), email varchar(30)unique, 俚语varchar(128), / 定义varchar(200) / ) 在用户登录或登录后,我的gui转到另一个框架,允许用户输入一些我想要添加到俚语列的更多信息,但我一直变为空。是否可以从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();
}
}
答案 0 :(得分:0)
首先使用PreparedStatement的强制性建议。它正确地转义单引号和其他特殊字符,并阻止SQL injection。
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相关的错误。在这种情况下,它只能是User info
包含null。也许您可以提供更详细的错误消息。或追踪价值;信息和他们的领域。我们现在可以告诉他们,连连接都可能是罪魁祸首。