2011-04-10 65 views
0

我正在開發一個可脫機的移動Web應用程序,並需要在HTML5數據庫中存儲大量原始字節數據。我想將它們存儲爲儘可能緊湊,所以加入的字符串不是一個選項。以下是創建數據庫表的示例代碼,插入數據並再次檢索數據。在HTML5 sqlite數據庫中存儲字節數組

實施例:

var bytes=[97, 0, 6, 244, 98, 66, 76, 65, 131, 5, 7, 142, 81, 184, 112, 33]; 

openDatabase('_test_', 1.0, '_test-', 5000).transaction(function(tx) { 
tx.executeSql("DROP TABLE IF EXISTS MYTABLE", [], function(){ 
tx.executeSql("CREATE TABLE IF NOT EXISTS MYTABLE(content BLOB);",[],function(){ 
tx.executeSql("INSERT INTO MYTABLE values(?)", [bytes], 
    function() 
    { 
     tx.executeSql("SELECT * FROM MYTABLE ", [], function(transaction, results) 
     { 
      console.log(results.rows.item(0)) 
     }); 
},function(transaction, error){console.log(error)}) 
},function(transaction, error){console.log(error)}) 
}) 
}) 

我試圖存儲陣列是,這實際上節省了作爲接合字符串:「97,0,6,244,98,66,76,65,131, 5,7,142,81,184,112,33「。不是我所需要的,因爲它會太大。

我數組轉換成字符串現在:

openDatabase('_test_', 1.0, '_test-', 5000).transaction(function(tx) { 
tx.executeSql("DROP TABLE IF EXISTS MYTABLE", [], function(){ 
tx.executeSql("CREATE TABLE IF NOT EXISTS MYTABLE(content BLOB); ", [], function(){ 
tx.executeSql("INSERT INTO MYTABLE values(?)", [s], 
    function() 
    { 
     tx.executeSql("SELECT * FROM MYTABLE ", [], function(transaction, results) 
     { 
      console.log(results.rows.item(0)) 
     }); 
},function(transaction, error){console.log(error)}) 
},function(transaction, error){console.log(error)}) 
}) 
}) 

什麼DB現在返回簡直是「一個」。

所以我的問題是如何序列化HTML5數據庫中的JavaScript字節數組而不訴諸連接的字符串?

+0

爲什麼你的數組中有'0',它是一個空字符? – Benoit 2011-04-10 15:11:11

+0

數據只包含一個值爲0的字節。有意義嗎? – 2011-04-10 15:14:09

回答

0

轉換數據爲十六進制值並插入這樣的:

INSERT INTO t2 VALUES(X'53514C697465'); 

BLOB文字是包含十六進制數據和由單一的「x」或「X」字前面字符串文字

Literal Values

+0

我該怎麼做一個應該保存多於一個字節的數據庫列呢?我需要編碼一個字節序列。 – 2011-04-10 15:33:38

+1

'x'0500''是兩個字節。當然是 – Benoit 2011-04-10 15:38:00

+1

!!!!謝謝你會嘗試 – 2011-04-10 15:46:59