Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用UNICODE或ASCII字符代码创建SQL查询_Java_Mysql_Sql_Jdbc_Unicode - Fatal编程技术网

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

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

我想创建一个包含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")
所有这些查询都应该相当于
“从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)