Java 使用UNICODE或ASCII字符代码创建SQL查询
我想创建一个包含ASCII或UNICODE字符码的SQL查询。例如,单引号(')的ASCII字符代码为Java 使用UNICODE或ASCII字符代码创建SQL查询,java,mysql,sql,jdbc,unicode,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("se
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")
所有这些查询都应该相当于“从name='test'所在的用户中选择*”
当我运行上述代码时,DBMS(我尝试使用Mysql和SQLite)无法将ascii和unicode代码识别为单个引号
总之,我知道参数化查询是最理想的。但是,在本例中,我想做的是,当DBMS解析sql代码时,DBMS应该识别unicode字符。例如,如果我使用\u0027,JVM会将其识别为单个引号,但我希望JVM不识别,DMB识别字符编码
有没有办法使用字符代码而不是字符本身 将ascii/unicode数字放在双引号内时,它们不会解析为字符,请尝试以下操作:
"select * from users where name =" + Character.toString(Character.toChar(yourIntHere)) + ...
然后,当您将ascii/unicode数字放在双引号内时,应该构建您要查找的字符串,它们不会解析为字符,请尝试以下操作:
"select * from users where name =" + Character.toString(Character.toChar(yourIntHere)) + ...
然后,这将生成您要查找的字符串。不,您不想这样做。你应该做什么
PreparedStatement ps = conn.prepareStatement("select * from users where name = ?");
ps.setString(1, "test");
ResultSet rs = ps.executeQuery();
请记住,Java中的所有字符串都是Unicode字符串,因此您的建议是开始将字符串值作为字节流发送到JDBC驱动程序,这将非常混乱且容易出错(如果可能的话)。不,您不想这样做。你应该做什么
PreparedStatement ps = conn.prepareStatement("select * from users where name = ?");
ps.setString(1, "test");
ResultSet rs = ps.executeQuery();
请记住,Java中的所有字符串都是Unicode字符串,因此您建议开始将字符串值作为字节流发送到JDBC驱动程序,这将非常混乱且容易出错(如果可能的话)。您的查询应该如下所示:
"select * from users where name =" + Character.toString((char)39) + "test" + Character.toString((char)39) + "\""
您的查询应该如下所示:
"select * from users where name =" + Character.toString((char)39) + "test" + Character.toString((char)39) + "\""
单引号作为语句的一部分(按语法)或数据的一部分是有区别的。关于语句,您必须使用单引号,因为它是用来括起字符文字的。所以不,您的查询是不等价的,前两个在SQL中是错误的。当然,您可以使用这些代码在Java中构建查询。我不理解这个问题,比如
“select…name=“+(char)39+”test“+(char)39
或“select…name=\u0027test…”
?但是为什么,这和写字符串是一样的?最好将PreparedStatement
与占位符shmmm一起使用。。不,你可能不想做这些。实际上,你想做的是找到一些关于参数化查询的技巧,这样你就可以把你喜欢的任何东西作为变量文本输入,而不必把查询搞得乱七八糟。是的,我知道参数化查询是最理想的。但是,我想做的是,当DBMS解析sql代码时,DBMS应该识别unicode字符。例如,如果我使用\u0027,JVM会将其识别为一个单引号,但我希望JVM不识别字符编码,DMBS识别字符编码。我不认为指定SQL只允许该位置的“
字符。。。对于表达式,DBMS可能会为此提供一些功能(如CHAR()
-select CHAR(65)
或…其中letter=CHAR(65)
)语句的一部分(每种语法)或数据的一部分有单引号的差异。关于语句,您必须使用单引号,因为它是用来括起字符文字的。所以不,您的查询是不等价的,前两个在SQL中是错误的。当然,您可以使用这些代码在Java中构建查询。我不理解这个问题,比如“select…name=“+(char)39+”test“+(char)39
或“select…name=\u0027test…”
?但是为什么,这和写字符串是一样的?最好将PreparedStatement
与占位符shmmm一起使用。。不,你可能不想做这些。实际上,你想做的是找到一些关于参数化查询的技巧,这样你就可以把你喜欢的任何东西作为变量文本输入,而不必把查询搞得乱七八糟。是的,我知道参数化查询是最理想的。但是,我想做的是,当DBMS解析sql代码时,DBMS应该识别unicode字符。例如,如果我使用\u0027,JVM会将其识别为一个单引号,但我希望JVM不识别字符编码,DMBS识别字符编码。我不认为指定SQL只允许该位置的“
字符。。。对于表达式,DBMS可能会为此提供一些功能(如CHAR()
-选择CHAR(65)
或…其中letter=CHAR(65)
)注:要转换int
其仅(CHAR)值
,无需创建字符串
-并且字符中没有toChar(int)
(Java 10)注意:要将int
转换为它的(char)值
,无需创建字符串
——并且字符
中没有toChar(int)
(Java 10)