也许我错过了一些东西,但我需要一个预先填充了大量数据的客户端数据库.
为了测试客户端数据库是否适合任务,我使用该transaction.executeSql()
方法创建了一些带有虚拟数据的虚拟表.但是从我可以收集的内容来看,它需要对每个CREATE TABLE和INSERT INTO查询执行executeSQL调用.我很懒,这对我来说似乎太过分了.
我想知道......:我可以使用SQLite GUI快速创建一个SQLite表.我已经尝试导出一个SQL文件并在一个executeSQL语句中运行它,但是只处理第一个'CREATE TABLE'位没有插入.
是否有一些特殊的事务对象方法,我不知道一次运行多个查询?
这是针对Mobile Safari购买的方式,据Apple称,它使用SQLite数据库为其客户端数据库提供支持.
在命令行(在Linux框中),使用
sqlite3 myDatabase.sqlite .dump > myDatabase.sql
现在您将sqlite文件转储到普通的sql文件中.它将包含create table语句和insert语句.
然后,一些客户端代码(可能需要一些调整,但你会得到的想法)
首先,抓住sql转储.(使用jQuery的示例)
$.get('./dumps/myDatabase.sql', function(response) { // console.log("got db dump!", response); var db = openDatabase('myDatabase', '1.0', 'myDatabase', 10000000); processQuery(db, 2, response.split(';\n'), 'myDatabase'); });
processQuery函数逐个处理所有语句,并默默地忽略错误.
function processQuery(db, i, queries, dbname) { if(i < queries.length -1) { console.log(i +' of '+queries.length); if(!queries[i+1].match(/(INSERT|CREATE|DROP|PRAGMA|BEGIN|COMMIT)/)) { queries[i+1] = queries[i]+ ';\n' + queries[i+1]; return processQuery(db, i+1, queries, dbname); } console.log('------------>', queries[i]); db.transaction( function (query){ query.executeSql(queries[i]+';', [], function(tx, result) { processQuery(db, i +1, queries,dbname); }); }, function(err) { console.log("Query error in ", queries[i], err.message); processQuery(db, i +1, queries, dbname); }); } else { console.log("Done importing!"); } }