2013-07-05 96 views
1

我有我已經在MySQL存儲該值的[[email protected]一個字節數組存儲字節數組作爲字符串在DB和創建字節數組DB作爲一個字符串表示 - mybyteArray.toString()爪哇 - 使用字符串值

我想從數據庫中檢索保存的值,並使用原始字節數組的字符串值創建一個新的字節數組。

我曾嘗試例子Java Byte Array to String to Byte Array

byte to string and vice versa

但是我沒有得到的原始字節數組值。它產生了不同的價值。任何人都可以請指教?

+2

*我有一個字節數組的值[B @ 6c89db9a我已經存儲了這個值... * ...這不是一個值。這是一個完全無用的(Java之外的)散列碼。數組的'toString()'方法不打印數組的內容。 –

+0

是的,我使用它進行身份驗證,因此我需要存儲它 – Santiago

回答

4

我有值[B @ 6c89db9a我已經存儲了該值的字節數組...

這不是一個值。這是一個完全無用的(Java之外的)散列碼。數組的toString()方法確實是而不是打印數組的內容。數組不會覆蓋toString(),因此調用Object.toString()

如果你想在MySQL中存儲一個任意字節的數組,你可以使用BLOB類型(或者VARBINARY?它已經有一段時間,因爲我已經使用MySQL,但它從一個快速谷歌,他們基本上在你的表中現代版本相同)出現,並存儲字節:

創建表的例子(some_bytes BLOB);

你準備好的聲明中會是什麼樣子:

String query = "INSERT INTO example (some_bytes) VALUES (?)"; 
PreparedStatement pstmt = conn.prepareStatement(query); 

你想通過插入這些字節:

pstmt.setBytes(1, myByteArray); 
pstmt.execute(); 

編輯從添加註釋:你必須在一些字節陣列。如果這些字節代表字符的字符串,你知道的字符集是什麼,您將它們轉換爲String使用String構造函數字符集:

String myString = new String(bytes, knownCharset); 

例如,如果它們代表了UTF-8字符串可以使用:

String myString = new String(byteArray, Charset.forName("UTF-8")); 
+0

我正在使用不支持BLOB或CLOB的框架。因此,我認爲我可以在數據庫中使用toString存儲字節數組,並檢索字符串並重新創建原始字節數組。那可能嗎? – Santiago

+0

你以爲......錯了。數組的'toString()'的結果在JVM內部完全沒有任何意義。 –

+0

好,那麼你可以建議我如何在不使用blob等的情況下將字節數組存儲在dB中? – Santiago

0

根據Object.toString() -

返回該對象的字符串表示。通常,toString方法返回一個「文本表示」該對象的字符串。結果應該是一個簡潔但內容豐富的表述,對於一個人來說很容易閱讀。建議所有子類重寫此方法。

類Object的toString方法返回一個字符串,其中包含對象爲實例的類的名稱,符號字符「@」和對象的哈希代碼的無符號十六進制表示形式。

換句話說,該方法返回一個字符串等於值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

所以你要保存包含您的字節數組的真正價值。

+0

由於框架限制,我無法使用CLOB或BLOB。我試圖將字符串中的二進制數組值保存在數據庫中。然後檢索保存的值並將其作爲字節數組放回。那可能嗎? – Santiago

0

你可以試試下面兩個功能來完成您的轉換工作:

public static byte[] toBytes(String s) { 
    try { 
     return s.getBytes("UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     System.out.println("UTF-8 not supported?", e); 
     return null; 
    } 
    } 

     public static String toString(final byte [] b, int off, int len) { 
      if (b == null) { 
      return null; 
      } 
      if (len == 0) { 
      return ""; 
      } 
      try { 
      return new String(b, off, len, "UTF8"); 
      } catch (UnsupportedEncodingException e) { 
      System.out.println("UTF-8 not supported?", e); 
      return null; 
      } 
     }