我有一个在iPhone中构建为本机应用程序的应用程序。该应用程序使用了一个SQLite数据库,其中包含1000行。现在我需要使用Phonegap创建一个Android应用程序。实际上,我不了解Phonegap或Android,但我知道一些HTML,CSS和JavaScript。所以我决定在Phonegap中制作应用程序。
现在我想在我的jQuery Mobile应用程序中集成这个数据库(SQLite)。在iPhone应用程序中这很容易,但是当我在Phonegap中寻找解决方案时,我很少迷失。我已经在jQuery Mobile上检查了很多教程,但没有在浏览器中工作。
我是Phonegap和jQuery的新手。
答案 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.db
和file__0/0000000000000001.db
个文件)
对于Android,请将预先填充的Databases.db
和file__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();
}
}
注意:您需要添加一些导入,尝试捕获功能,最后预填充复制功能
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/..