2011-05-25 66 views
1

這裏是我的代碼,大家好,我在做什麼錯了(我不得不使用常規的聲明,而不是PreparedStatement類,這樣我可以使用MySQL的AES_ENCRYPT /解密方法):我不斷收到錯誤:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列'。 。 。 。 「在‘​​字段列表’

DDL

s.executeUpdate("CREATE TABLE login ("+"user_Name CHAR(50) NOT NULL,"+"PRIMARY KEY(user_Name),"+"pass_Word CHAR(50)NOT NULL, cust_ID CHAR(10))"); 

DML

public static void insertLoginData(String user_Name, String pass_Word, String cust_ID)throws IOException, SQLException, NoSuchAlgorithmException, InvalidKeyException 
{ 
    . . . 

    String insert="INSERT INTO login(user_Name, pass_Word, cust_ID)" 
      + " VALUES("+user_Name+",AES_ENCRYPT('text',"+pass_Word+"),"+cust_ID+")"; 

    s.executeUpdate(insert);  
+1

放在更具體的。像確切的錯誤信息。你在其他問題中提到了更多細節。其次,在s.executeUpdate()放置打印語句之前,打印插入變量。然後在MySQL中嘗試。 – 2011-05-25 16:56:19

+0

先生您是一位紳士和學者。 。 。看到打印的SQL語句讓我親眼看到我需要添加額外的引號。謝謝! – Mike 2011-05-25 17:08:15

+0

已糾正的SQL條目對於像我這樣的其他人:String insert =「INSERT INTO login(user_Name,pass_Word,cust_ID)」 +「VALUES(''+ username5 +'',AES_ENCRYPT('text',''+ password5 +'') , ' 「+ custID5 +」')「; – Mike 2011-05-25 17:08:38

回答

2

你可能需要繞柱值單引號是這樣的:

String insert="INSERT INTO login(user_Name, pass_Word, cust_ID)" 
     + " VALUES('"+user_Name+"',AES_ENCRYPT('text','"+pass_Word+"'),'"+cust_ID+"')"; 

附註:有人會最終指出,此代碼受SQL注入攻擊。

+0

謝謝文森特! – Mike 2011-05-25 17:09:00

+0

順便提一下,我能夠讓Java的Cipher類正常工作,所以我不必使用mySQL內部的AES_ENCRYPT/DECRYPT函數!顯然,我的密碼不起作用,因爲我一直爲encrypt()和decrypt()方法生成兩個單獨的密鑰! DOOH!但是,由於這個問題,我學到了很多關於SQL語句,可以獲得的不同錯誤以及最重要的解決方法。 一旦我意識到如何讓Java Cipher類正常工作,我就能夠使用PreparedStatement類來避免SQL注入問題。 Booyah! – Mike 2011-05-27 18:43:05