我正在尝试使用 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/