2014-05-03 65 views
0

我正在嘗試編寫一個處理數據庫與mysql服務器交互的類。 爲此,我使用'mysql-connector-java-5.1.30.jar'。準備語句中的剩餘'x'

我遇到了這種行爲,我不確定我是否犯了錯誤或發現了錯誤。 測試的語句讀取這樣的:

"INSERT INTO test.database.EncryptedClass (eMail) VALUES (?);" 

我插入在字節[]形式的加密值。

statement.setBytes(iterator, encryptedValue); // (iterator = 1) 

結果是以下錯誤:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的」 .EncryptedClass(電子郵件)VALUES(X‘63EEAAA2F3CE444C9F1256FA8052F287CD96D67D29E2EB’在行1

正如你可以看到正確的語法手冊,有前面的X實際值,我相信這個變量應該是用實際值代替,但是由於某些未知的原因,這個失敗了,而是附加了這個值。 如果這是一個bug,它是不是謊言與連接器庫或服務器本身有關 我知道這一點:值實際上是在數據庫中注入的,但我不確定該值是否已經傳輸爲false,或者數據庫函數是否替換'?'值這樣做失敗。

+1

「x」表示接下來是一個十六進制字符串;你的問題在你的查詢中要早得多(就在mysql告訴你「_near_」) –

+1

如果你把這個語句寫到mysql命令行界面會發生什麼?我相信'x'標記下面的值是十六進制編碼的字節。 – Kayaman

回答

0

guido和Kayaman是非常正確的。

問題是表名,它可能不包含'。'字符。 該值之前的x確實將其標識爲十六進制值。