2014-04-17 64 views
0

我有一個應用程序構建爲iPhone中的本機應用程序。該應用程序使用了一個sqlite數據庫,其中有1000行。現在我需要使用Phonegap創建一個Android應用程序。其實,我不知道Phonegap或Android,但我知道一些HTML,CSS和Javascript。所以我決定在Phonegap中製作應用程序。在jQuery Mobile Phonegap應用程序中添加預填充的數據庫

現在我想將這個數據庫(sqlite)集成到我的jQuery Mobile應用程序中。在iPhone應用程序中很容易,但當我在Phonegap中尋找解決方案時,我迷失了方向。有人可以指導我如何做到這一點?我已經檢查了許多關於jQuery Mobile的教程,但都沒有在瀏覽器中工作。

所以有人可以幫助我,因爲我是Phonegap和jQuery中的新手。

問候

潘卡

+0

你能告訴我。什麼幫助你需要。 – Aravin

+0

HI Aravinth,我已經在sqlite中創建了一個數據庫。我想在應用程序中使用相同的數據庫。由於數據庫有1000行,因此我不想隨時添加行。 – pankaj

+0

檢查這一個http://k4ml.github.io/android-phonegap-with-existing-sqlite-database.html這也是http://gauravstomar.blogspot.in/2011/08/prepopulate-sqlite-in- phonegap.html – Aravin

回答

4

我建議包括返回包含您的數據JSON字符串的文件。

在應用程序的初始加載時,檢查數據庫是否已被填充,如果沒有運行函數來獲取對象,然後將其加載到數據庫中。

您可以使用簡單的$.get()方法並利用webSQLHTML5規範。

下面是一個例子:

我創建一個名爲db對象開始 -

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事件觸發呼叫

dbHandler.initialize(); 

這可能不工作了的盒子,但應該是你正在尋找什麼的好開始。

+0

謝謝Dawson,它爲我工作 – pankaj

0

這對我很好。請按照下列步驟操作:

你已經有一個數據庫,在您的iOS應用,你可以直接將數據庫文件(你需要Databases.dbfile__0/0000000000000001.db文件)

  • 爲Android,讓您的預先填充Databases.dbfile__0/0000000000000001.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(); 

     } 
     } 

注:您需要添加一些進口,嘗試捕捉功能最後預填充複製功能

  • 打開database.db文件中的某些數據庫查看(SQLite的經理)並找到DatabaseName & DisplayName。您應該在您的javaScript OpenDatabase代碼中提及這些名稱。

這將是像下面(我的數據庫名=數據庫,顯示名稱= 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/..

相關問題