当前位置: 首页 > 面试题库 >

Java中的SQL查询单引号

王磊
2023-03-14
问题内容

我有一个要在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时,所有订单都出错了。 输出:和其他数据 你看比命令是错误的。所以这是我的问题,我该如何保存该订单? 问题答案: 解开混乱。先汇总,然后再加入: 无需加入两次。如果您计数 最多或所有行, 这应该是最快的。 对于 较小的选择 , 相关子查询 更快: 至