【问题标题】:Residual 'x' in preparedStatementPreparedStatement 中的残差“x”
【发布时间】: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


【解决方案1】:

guido 和 Kayaman 非常正确。

问题在于表名,它可能不包含“。”人物。 值前面的 x 确实将其标识为十六进制值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2020-03-25
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多