使用sql.js在javascript中加载sqlite数据库

时间:2016-04-20 15:55:28

标签: javascript sqlite sql.js

有人可以提供一个简单的完整示例来加载不使用node.js的现有sqlite数据库。

假设sql db与index.html位于同一位置

示例:

我试过这个例子但是"内容"未定义。另外,我不知道如何访问"内容"?我真的可以用一个完整的例子。

var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/database.sqlite', true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  var uInt8Array = new Uint8Array(this.response);
  var db = new SQL.Database(uInt8Array);
  var contents = db.exec("SELECT * FROM my_table");
  // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]
};
xhr.send();

1 个答案:

答案 0 :(得分:2)

我知道这已经老了,但是你去了我的朋友。你就在那里,只是稍微调整一下。我不确定您是否正在使用GitHub中的SQL.js库,但请注意解决很多浏览器安全问题,并使大脑中的SQL方面更容易。

如果您没有创建源或有一些UTF问题,则会抛出异常。我在一个晚上写了这个,所以我没有运行多个函数,但我假设在异步过程中需要回调来防止SQLite问题。这是我第一次使用SQLite或SQL.js库,所以我还不知道。

重要! 这只是一个本地解决方案,它比高中更衣室有更明显的漏洞。绝不应该在任何暴露于互联网的东西上使用它。

这是在我的班级顶部宣布的,而不是在一个函数中。这是有目的的,因为我运行多个查询,并且如果它太大,则不想要加载/卸载对象的开销。

请注意,源...相对路径上的完全限定路径对我没有用。

$array = array();
$handle = fopen("2.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $line = split('x', $line);
        array_pop($line);
        //sort($line);
        print_r($line);
        array_push($array, $line);
    }
    fclose($handle);
} else {
    echo "File is failed to open";
} 

此时,您已将数据库加载到名为localData的对象中,您可以从任何位置查询它。这是我写的一个查询来获取Genre信息。

$array = array();
$handle = fopen("2.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $line = split('x', trim($line));
        //sort($line);
        print_r($line);
        array_push($array, $line);
    }
    fclose($handle);
} else {
    echo "File is failed to open";
} 

SQL调用的输出通常是一个数组数组,不用担心更改它,只需将SQL调用的结果输出到控制台并记下返回字段和值,从那里只需使用$ 。祝你心满意足。

这是另一个查询,同样的前提,但目标是创建一个SQL语句以推送到MS SQL服务器并获取有关我本地集合中的艺术家的FreeDB数据。

注意:这可以在一次调用中完成,方法是查询我的本地sqlite表,生成sql并使用不同的conn将其推送到MS SQL,甚至更好地利用泛型proc,但让&#39 ; s现在保持简单。

var xhrLocal = new XMLHttpRequest();
xhrLocal.open('GET', 'http://localhost/mp3/data/media.sqlite', true);
xhrLocal.responseType = 'arraybuffer';

var localData;

xhrLocal.onload = function(e) {
  var uInt8Array = new Uint8Array(this.response);
  localData = new SQL.Database(uInt8Array);
};

xhrLocal.send();