我想创建一个包含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识别字符编码。
是否可以使用字符代码代替字符本身?
答案 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) + "\""