使用UNICODE或ASCII字符代码创建SQL查询

时间:2018-09-24 12:16:59

标签: java mysql sql jdbc unicode

我想创建一个包含ASCII或UNICODE字符代码的SQL查询。例如,单引号(')的ASCII字符代码为39,而Unicode代码为U+0027。在Java中,我想通过将单个代码替换为其字符代码来编写查询:

ASCII:

connection.createStatement().executeQuery("select * from users where name =39test39")

Unicode:

connection.createStatement().executeQuery("select * from users where name =U+0027testU+0027")

所有这些查询应等效于"select * from users where name ='test'"

当我运行上述代码时,DBMS(我尝试过使用Mysql和SQLite进行尝试)无法将ascii和unicode代码识别为单引号。

总而言之,我知道参数化查询是理想的。但是,在这种情况下,我想做的是,当DBMS解析sql代码时,DBMS应该识别出unicode字符。例如,如果我使用\ u0027,则JVM会将其识别为单引号,但我希望JVM不识别并且DMBS识别字符编码。

是否可以使用字符代码代替字符本身?

3 个答案:

答案 0 :(得分:4)

不,您不想这样做。你应该在做

PreparedStatement ps = conn.prepareStatement("select * from users where name = ?");
ps.setString(1, "test");
ResultSet rs = ps.executeQuery();

请记住,Java中的所有字符串都是Unicode字符串,因此建议您开始将字符串值作为字节流发送到JDBC驱动程序,这将很麻烦且容易出错(即使可能的话)。

答案 1 :(得分:0)

将ascii / unicode数字放在双引号中时,它们不会解析为字符,而是尝试如下操作:

"select * from users where name =" + Character.toString(Character.toChar(yourIntHere)) + ...

然后应该构建您要查找的字符串

答案 2 :(得分:0)

您的查询应如下所示:

"select * from users where name =" + Character.toString((char)39) + "test" + Character.toString((char)39) + "\""