2013-04-24 44 views
0

我想更新JTable而不AES_ENCRYPT數據是可以更新和查看,但由於數據被加密每次我嘗試調用此方法數據仍然加密。我怎樣才能解決這個問題?如何更新jtable與AES_DECRYPT

private void Update_Table(){ 



    try{ 
     String sql = "SELECT ID, AES_DECRYPT(FirstName, 'uk112') " 
      + "AS FirstName, AES_DECRYPT(MiddleName, 'uk112') " 
      + "AS MiddleName, AES_DECRYPT(LastName, 'uk112') " 
      + "AS LastName, DOB, AES_DECRYPT(Gander, 'uk112')" 
      + "AS Gander, AES_DECRYPT(Address, 'uk112')" 
      + "AS Address, AES_DECRYPT(City, 'uk112') " 
      + "AS City, AES_DECRYPT(PostCode, 'uk112')" 
      + "AS PostCode FROM Customer"; 
    pst = conn.prepareStatement(sql); 
    rs =pst.executeQuery(sql); 
    CTable.setModel(DbUtils.resultSetToTableModel(rs)); 
    pst.close(); 
    rs.close(); 
    } 
    catch(Exception e){ 
JOptionPane.showMessageDialog(null, e); 
    } 
    } 

每當我試圖調用Update_Table方法,以更新的JTable這種情況

enter image description here

+0

你有沒有試過從'rs'類似'rs.getString(「FirstName」)''的數據?它是否給出'加密'數據或'解密'? 如果它給出'encypted'數據,是否有可能在嵌入數據庫的同時兩次加密數據? 如果它給出'解密'的數據,你能告訴我們'DbUtils'的代碼嗎? 如果它給出 – 2013-04-24 17:22:34

+0

我只加密了一次數據,但是如何在'pst = conn.prepareStatement(sql)之後使用'rs.getString(「FirstName」)' – 2013-04-24 17:36:14

+0

; (rs.next()){String name = rs.getString(「FirstName」);}使用while(rs.next()){String name = rs.getString(「FirstName」); System.out.println(name);}'並檢查控制檯 – 2013-04-24 18:30:11

回答

1

這可能仍然加密。這是default renderer的預期產出。如here所示,結果由用byte陣列調用的toString()產生。在您的custom renderer中,可以使用合適的構造函數將數組轉換爲String,但需要指定數據庫使用的相同編碼。

+0

我解密了兩次,是不是可以多次解密數據? – 2013-04-24 20:41:49

+0

我不知道。嘗試使用'Arrays.toString()'來查看每個'byte []'中的內容。 – trashgod 2013-04-24 23:45:29

+0

我會嘗試歡呼 – 2013-04-25 09:02:30