2011-04-10 94 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

相关问题