【发布时间】:2014-05-03 14:39:55
【问题描述】:
我正在尝试编写一个类来处理与 mysql 服务器的数据库交互。 为此,我使用 'mysql-connector-java-5.1.30.jar'。
我遇到了这种行为,我不确定我是否犯了错误或发现了错误。 测试语句如下所示:
"INSERT INTO test.database.EncryptedClass (eMail) VALUES (?);"
我以 byte[] 形式插入一个加密值。
statement.setBytes(iterator, encryptedValue); // (iterator = 1)
结果如下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '.EncryptedClass (eMail) VALUES (x'63EEAAA2F3CE444C9F1256FA8052F287CD96D67D29E2EB' 附近使用正确的语法
如您所见,实际值前面有一个 x。我相信这是应该被实际值替换的变量,但由于某些未知原因,这失败了,而是附加了该值。 如果这是一个错误,它是否与连接器库或服务器本身有关。 我知道很多:这些值实际上是注入数据库中的,但我不确定该值是否已经传输为假,或者数据库函数是否替换了“?”这样做的价值失败。
【问题讨论】:
-
x表示后面是一个十六进制字符串;你的问题在你的查询中要早得多(就在mysql告诉你“near”的地方) -
如果将该语句写入mysql命令行界面会发生什么?我相信“x”表示以下值是十六进制编码字节。
标签: java mysql prepared-statement