Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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
mysql的Java PreparedStatement.setBytes上出现语法错误_Java_Mysql_Sql_Prepared Statement_Blob - Fatal编程技术网

mysql的Java PreparedStatement.setBytes上出现语法错误

mysql的Java PreparedStatement.setBytes上出现语法错误,java,mysql,sql,prepared-statement,blob,Java,Mysql,Sql,Prepared Statement,Blob,我正在尝试使用PreparedStatement.setBytes方法设置BLOB mysql字段。 问题是查询以包含要插入的字节的字符串结束。。或多或少 下面是代码,它是关于: PreparedStatement stmt = this.getStatement( "UPDATE TABLE users SET logintoken=? WHERE qrid=?" ); stmt.setBytes( 1, token ); stmt.setString( 2,

我正在尝试使用PreparedStatement.setBytes方法设置BLOB mysql字段。 问题是查询以包含要插入的字节的字符串结束。。或多或少

下面是代码,它是关于:

PreparedStatement stmt = this.getStatement( "UPDATE TABLE users SET logintoken=? WHERE qrid=?" );
        stmt.setBytes( 1, token );
        stmt.setString( 2, bar.getId() );
        stmt.execute();
对于记录,令牌是一个字节[],它始终包含SecureRandom生成的20个字节

下面是错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'TABLE users SET logintoken=x'6DA9D5137B059AE6BCFE7F170693A76CA6484FFB24963BF88AA' at line 1
正如您所看到的,它在数据的开头放置了一个x’。 从逻辑上讲,这会中断查询,因为字符串中不包含部分数据

我假设PreparedStatement.setBytes可以解决问题,但事实并非如此。 我也尝试过使用java.sql Blob对象,但它或多或少会出现同样的问题


有什么我遗漏的吗?

仔细查看您的
更新
查询,不需要
。应该是这样的

UPDATE users SET logintoken=? WHERE qrid=?

有关更多信息,请参阅。

您的令牌值是多少?我在上面说过,它是一个字节[],包含20个随机字节。由SecureRandom生成实际上,
x
是一个标记,表示下面的数据是二进制数据,所以这不是问题。好吧,就是这样,我似乎应该在凌晨3点停止编程,因为我想得太多了,忽略了像这样愚蠢的东西-u-非常感谢:)