在jQuery Mobile Phonegap应用程序中添加预先填充的数据库

时间:2014-04-17 08:44:38

标签: jquery sqlite jquery-mobile cordova

我有一个在iPhone中构建为本机应用程序的应用程序。该应用程序使用了一个SQLite数据库,其中包含1000行。现在我需要使用Phonegap创建一个Android应用程序。实际上,我不了解Phonegap或Android,但我知道一些HTML,CSS和JavaScript。所以我决定在Phonegap中制作应用程序。

现在我想在我的jQuery Mobile应用程序中集成这个数据库(SQLite)。在iPhone应用程序中这很容易,但是当我在Phonegap中寻找解决方案时,我很少迷失。我已经在jQuery Mobile上检查了很多教程,但没有在浏览器中工作。

我是Phonegap和jQuery的新手。

2 个答案:

答案 0 :(得分:4)

我建议添加一个文件,该文件返回包含您数据的JSON字符串。

在初始加载应用程序时检查数据库是否已填充,如果没有运行函数来获取对象,然后将其加载到数据库中。

您可以使用简单的$.get()方法,并使用HTML5的{​​{1}}规范。

以下是一个例子:

我首先创建一个名为db -

的对象
webSQL

var db; dbHandler = { initialize: function() { db = window.openDatabase('appdb', '1.0', 'AppDB', 5000000); db.transaction(dbHandler.createDB, dbHandler.errorCB, dbHandler.checkDB); }, createDB: function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS _TABLE_NAME_ (itemID unique, someField, someOtherField)'); }, checkDB: function(tx) { tx.executeSql('SELECT * FROM _TABLE_NAME_', [], dbHandler.checkDBcallBack, dbHandler.errorCB); }, checkDBcallBack: function(tx, results) { if(results.rows.length > 0) { return true; } else { $.get('local/file/with/json/object.json', function(data) { dbHandler.populateDB(JSON.parse(data)); }); } }, populateDB: function(records) { var len = records; db.transaction(function(tx) { for(var i =0; i < len; i++) { tx.executeSql('INSERT INTO _TABLE_NAME_ (someField, someOtherField) VALUES (?,?)', [], dbHandler.successCB, dbHandler.errorCB); } }, dbHandler.errorCB, dbHandler.successCB); }, errorCB: function(tx, err) { //console.log(err); }, successCB: function(msg) { if(msg) { //navigator.notification.alert(msg); } } }; 事件触发调用后

deviceready

这可能不是开箱即用的,但应该是您正在寻找的良好开端。

答案 1 :(得分:0)

这对我来说很好。请按照以下步骤操作:

您的ios应用中已有数据库,您可以直接获取数据库文件(您需要Databases.dbfile__0/0000000000000001.db个文件)

  • 对于Android,请将预先填充的Databases.dbfile__0/0000000000000001.db db保留在根文件夹android->asset中。

  • 在您的编码器工具(我正在使用eclipse)中打开您的Android项目并打开src->com.projectname->projectname.java文件。

  • 请在projectname.java文件中更新以下代码更改。

<强> sampleproj.java:

    package com.pnms.sample;
    import android.os.Bundle;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;

    import android.annotation.TargetApi;
    import org.apache.cordova.*;

    public class sampleproj extends CordovaActivity 
    {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
      //Try add the below try catch

        try
         {
           this.copy("Databases.db","/data/data/com.pnms.sample/app_database/");
           this.copy("0000000000000001.db","/data/data/com.pnms.sample/app_database/file__0/");
         }
         catch (IOException e)
         {
          e.printStackTrace();
          }

        super.onCreate(savedInstanceState);
        super.init();
        // Set by <content src="index.html" /> in config.xml
        super.loadUrl(Config.getStartUrl());
        //super.loadUrl("file:///android_asset/www/index.html");
    }

            //Prepopulate copy function
     void copy(String file, String folder) throws IOException 
     {

      File CheckDirectory;
      CheckDirectory = new File(folder);
       if (!CheckDirectory.exists())
      { 
       CheckDirectory.mkdir();
      }

         InputStream in = getApplicationContext().getAssets().open(file);
         OutputStream out = new FileOutputStream(folder+file);

         // Transfer bytes from in to out
         byte[] buf = new byte[1024];
         int len; while ((len = in.read(buf)) > 0) out.write(buf, 0, len);
         in.close(); out.close();

       }
         }

注意:您需要添加一些导入,尝试捕获功能,最后预填充复制功能

  • 在某个数据库查看器(SQLite Manager)中打开database.db文件,然后找到DatabaseName & DisplayName。您应该在javaScript OpenDatabase代码中提到这些名称。

下面的(我的dbname =数据库,Displayname = EventPortal)

        .....
    function onDeviceReady()
    {

        db=window.openDatabase("Database", "1.0", "EventPortal", 100000);
        alert('db creating: '+db);
        db.transaction(createTable);
    }   
        .... and goes on... 

多数民众赞成。现在,您可以在数据库位置中查看预先填充的数据库。通常是/data/data/com.pnms.sample/app_database/..