【问题标题】:How to populate database using SQLitePlugin Cordova in android?如何在 android 中使用 SQLitePlugin Cordova 填充数据库?
【发布时间】:2014-04-29 11:22:12
【问题描述】:

按照 Gaurav 的建议,我已将“demo.db”文件复制到 /data/data/package_name/databases/: 访问:http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html

“demo.db”已经创建了表(例如:项目)

我尝试使用 SQLitePlugin https://github.com/chbrody/Cordova-SQLitePlugin/ 连接到“demo.db”

我已经按照这个插件的开发者的建议安装了这个插件。

在我的 .js 部分中,在触发“deviceready”事件后,我完成了以下操作:

var db = window.sqlitePlugin.openDatabase("demo", "1.0", "my demo", 500000);
db.transaction(function(tx){
tx.executeSql('INSERT INTO Projects (ProjectCode, ProjectDescription) VALUES(?,?)',["Lastly", "fdgsdfgsdg"], function(tx, result){
    tx.executeSql('SELECT * FROM Projects',[],function(tx, result){
        alert("projects");
        for (var i=0; i<result.rows.length; i++){
        alert("Row = " + i + " ID = " + result.rows.item(i).ProjectId +  "ProjectCode =  " + result.rows.item(i).ProjectCode);
       } 
       hideLoading();
    });
}, function(err) {//error callback function.
    alert("Database is not created.");
    hideLoading();
}); 

在我的例子中,SQLitePlugin 没有使用导入的“demo.db”,而是通过覆盖导入的数据库创建了新的数据库“demo.db”。执行插入代码时,会抛出错误,“错误:没有这样的表:项目”。因此,触发错误回调函数。请建议我解决我的问题。

【问题讨论】:

    标签: android sqlite cordova phonegap-plugins


    【解决方案1】:

    我已经找到了解决方案。就我而言,这是由于从 sqlite3(通过 sqliteadmin)和 SQLitePlugin 创建的 .db 文件的版本不兼容。为了摆脱它,首先我使用 SQLitePlugin 创建一个“demo.db”和一个表。

    var myDb = window.sqlitePlugin.openDatabase("demo", "1.0", "my demo", 50000);
        myDb.transaction(function(tx){
                    tx.executeSql('CREATE TABLE Projects (ProjectId integer primary key,   ProjectCode varchar(20), ProjectDescription varchar(100 ))');
            });
    

    之后,我从 /data/data/package_name/databases/ 导出这个创建的 .db。导出后,我将导出的 .db 文件粘贴到 eclipse 中的资产中。我按照 gautam 的建议将此文件导入到 .../databases/ 文件夹:http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html 然后填充数据库的真正任务开始了:

       var myDb = window.sqlitePlugin.openDatabase("demo", "1.0", "my demo", 50000);
        myDb.transaction(function(tx){
                    tx.executeSql('INSERT INTO Projects (ProjectCode, ProjectDescription) VALUES(?,?)',["Lastly", "fdgsdfgsdg"], function(tx, result){
                        alert("go");
                        hideLoading();
                        tx.executeSql('SELECT * FROM Projects',[],function(tx, result){
                            for (var i=0; i<result.rows.length; i++){
                                alert("Row = " + i + " ID = " + result.rows.item(i).ProjectId + "ProjectCode =  " + result.rows.item(i).ProjectCode);
                            } 
                        });
                    }, function(err) {
                        alert(err.message);
                        alert("Database is not created.");
                        hideLoading();
                    });
            });
    

    这里,sqlitePlugin 正在访问导入的“demo.db”,并将值插入到表 Projects 中。

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 1970-01-01
      • 2015-02-04
      • 2012-10-19
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      相关资源
      最近更新 更多