【发布时间】:2018-09-05 09:17:21
【问题描述】:
看起来我在这个声明中遗漏了一些东西。尝试在进入数据库之前加密密码。并且,使用以下字符串。
String Sql = "INSERT INTO virtual_users"
+"(domain_id, password, email) VALUES"
+"(?,ENCRYPT(?, CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))),?)";
上面的ENCRYPT有什么问题吗?
完整代码供参考。
public void AddMail(MailUsers mAC) {
String Sql = "INSERT INTO virtual_users"
+"(domain_id, password, email) VALUES"
+"(?,ENCRYPT(?, CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))),?)";
PreparedStatement ps = null;
try {
ps = DBUtils.getPreparedStatement(Sql);
ps.setInt(1, mAC.getDomain_id());
ps.setString(2, mAC.getPassword());
ps.setString(3, mAC.getEmail());
System.out.println(ps);
ps.executeUpdate();
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(DataAccess.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ps);
}
}
错误
com.mysql.jdbc.JDBC42PreparedStatement@1c9aab0a:插入 virtual_users(domain_id, password, email) VALUES(1,ENCRYPT('asdfasdf', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))),'tink@in.in') 严重: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列“密码”不能为空
【问题讨论】:
-
您是否收到任何错误消息?
-
是的,它说.. 信息:com.mysql.jdbc.JDBC42PreparedStatement@1c9aab0a: INSERT INTO virtual_users(domain_id, password, email) VALUES(1,ENCRYPT('asdfasdf', CONCAT('$6) $', SUBSTRING(SHA(RAND()), -16))),'tink@in.in') 严重:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“密码”不能为空
-
你是在windows机器上运行这个吗?
-
是的,在 Dev 环境中,它是 Windows。但是,在生产中,它将在 Ubuntu 上运行。