我有一个要在Java中运行的查询:
SELECT md5(CONCAT(md5('{clear password}') , '{salt}'));
它可以让我的应用程序连接并使用与论坛相同的用户名/密码。
它的工作,但当salt
包含字符时'
会给出错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
我将如何用Java编写此查询来满足’(如果存在)而不是(如果不存在)?
问候。
如果我遵循您的问题,那么您可以使用类似的方法-
String sql = "select md5(CONCAT(md5(?), ?))";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, password);
ps.setString(2, pwdSalt);
rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
另一种可能的解决方案是在Java中执行哈希和盐运算-
// A password hashing method.
public static String hashPassword(String in, String salt) {
try {
MessageDigest md = MessageDigest.getInstance("MD5"); // <-- Or, SHA-256
md.update(salt.getBytes()); // <-- Prepend salt.
md.update(in.getBytes());
// md.update(salt.getBytes()); // <-- Or, append salt.
byte[] out = md.digest();
return bytesToHex(out); // <-- Return the Hex Hash.
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
private static String bytesToHex(byte[] byteArr) {
StringBuilder sb = new StringBuilder();
Formatter fmt = new Formatter(sb);
for (byte b : byteArr) {
fmt.format("%02x", b);
}
return sb.toString();
}
最后,我不会在2014年使用MD5。我更喜欢SHA-256。
问题内容: 在整个SQL查询中使用单引号和使用双引号有什么区别吗? 哪个更好: 这种方法(带单引号): ? 或这种方法(使用双引号): 有没有更好的方法可以做到这一点? 对我来说,我喜欢第一种方法,因为我总是更喜欢PHP中的单引号。因此,我想确保在整个SQL查询中使用单引号是可以的,并且在变量或数据周围使用双引号是可以的并且可以跨平台使用,并且可以与MySQL以外的其他数据库一起使用! 问题答案:
问题内容: 我正在尝试在vb.net中使用sql查询插入数据,如下所示。名称= corp int’l poc = 1 当我尝试插入时,出现错误(“字符串’“之后的未封闭的引号)。当我尝试仅用1个单引号插入名称时,就会发生这种情况。 因此,我添加了一个replace函数,以将2个单引号替换为1个单引号来转义符号。没有错误,但是当我查看数据库时,添加了2个单引号而不是1个。 谁能告诉我如何通过参数化查
本文向大家介绍SQL中的子查询,包括了SQL中的子查询的使用技巧和注意事项,需要的朋友参考一下 子查询是查询内的查询,即嵌套查询。它放置在查询中,其结果用于进一步评估外部查询。 在SQL中,子查询必须遵循一些规则。其中一些是- 子查询应放在括号内。 子查询可以与不同的运算符(如<,>,<=,> =,IN,BETWEEN等)一起使用。还可以使用SELECT,INSERT,DELETE,UPDATE等
问题内容: 我的SQL查询可能有问题。在此查询中,我合并了4个不同的表。 我有一个用于存储常规信息的表(,)。 我有一个表,用于存储员工的一般信息(和)。 员工有工作。一名员工需要参加课程。这取决于他必须修的课程。此信息存储在表中(带有和)。 如果员工完成了课程,则将其存储在表中(带有和) 现在,我要搜索某个课程-当用户按下搜索按钮时,他应该得到两个不同的结果。 第一个:在这里您可以看到 哪个员工
问题内容: 我一直在试图弄清楚为什么以下代码未在我的ResultSet中生成任何数据: 另一方面,以下各项可以正常运行: SCHOOL的数据类型为CHAR(9字节)。除了setString,我还尝试了: 我完全留意接下来要研究什么;Eclipse调试器说,即使在setString或setCharacterStream之后,SQL查询也不会更改。我不确定这是因为设置参数不起作用,还是调试器根本无法在
问题内容: 我有PostgreSQL数据库,我尝试打印所有用户(人)。 当我执行此查询时 我得到所有车主按汽车数量排序 输出: 当我尝试链接所有者ID时,所有订单都出错了。 输出:和其他数据 你看比命令是错误的。所以这是我的问题,我该如何保存该订单? 问题答案: 解开混乱。先汇总,然后再加入: 无需加入两次。如果您计数 最多或所有行, 这应该是最快的。 对于 较小的选择 , 相关子查询 更快: 至