java - Java PreparedStatement.setBytes 与 mysql 语法错误

标签 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, bar.getId() );
        stmt.execute();

根据记录, token 是一个 byte[],始终包含 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 查询,TABLE 不是必需的。它应该就像

UPDATE users SET logintoken=? WHERE qrid=?

引用MySQL Documentation获取更多信息。

关于java - Java PreparedStatement.setBytes 与 mysql 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071068/

相关文章:

sql - 从字符串中去除非数字字符

java - 从 Selenium RemoteWebDriver 连接 Selenium Docker Firefox 容器时如何修复 "Connection Refused"错误?

java - 使用计时器倒计时暂停和恢复

java - 如何在JSP页面中嵌入Applet?

mysql - 用VB检查MySQL数据库是否存在

mysql - 无法从rails连接到远程mysql服务器

sql - 可重复随机抽样SQL

java - 我正在通过循环方法查找数字的阶乘,但是当我尝试运行代码时,出现错误,因为 "i' 无法在变量中解析

c# - 如何上传图片 phpmyadmin ASP.Net

java - jOOQ:将select语句中的字段从type1转换为type2