我希望使用WebSQL在Android PhoneGap应用程序中存储数据,但不知道从哪里开始。由于应用程序处于脱机状态,因此无需从 Web 检索数据,并且我希望有一个可以查询的预填充数据库。几个问题:如何创建预填充的数据库?(应该是什么样的文件格式)如果可以更改两个因素,如何使用SQL从数据库中获取这些因素组合的结果。如果用户从 Android 设备上的"设置"菜单中清除应用数据,数据库是否会被擦除?感谢任何帮助。谢谢
在PhoneGap应用程序中预填充SQLite数据库
1)您可以借助SQLite管理器等工具为应用程序创建基本数据库,或者如果您的应用程序中已经有一个数据库,则可以直接获取数据库文件。
2)然后你需要通过CLI安装Cordova/PhoneGap SQLitePlugin。(Cordova/PhoneGap SQLitePlugin)
cordova plugin add https://github.com/brodysoft/Cordova-SQLitePlugin
3) 在您的 html 中添加了以下脚本文件。
<script src="plugins/com.brodysoft.sqlitePlugin/www/SQLitePlugin.js"></script>
4)如果您正在为模拟器工作,请使用命令提示符复制您的databas,我已经在资产文件夹中添加了myDB.sqlite然后运行。
adb push myDB.sqlite /data/data/com.my_app.my_app/databases/myDB.sqlite
5)对于设备,只需将它们放入作为资产文件夹的应用程序捆绑包中,以防Android。您需要 myDB.sqlite 和 file__0/0000000000000001.sqlite 文件。
6)现在,您必须在首次启动应用程序时将文件复制到应用程序的本机位置,并确保在第一次SQLite查询之前复制文件。若要复制这些文件,可以根据您的环境使用以下代码片段。爪哇(安卓)。更多。。。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();
try {
String pName = this.getClass().getPackage().getName();
this.copy("myDB.sqlite", "/data/data/" + pName + "/databases/");
this.copy("0000000000000001.sqlite", "/data/data/" + pName + "/app_database/file__0/");
} catch (IOException e) {
e.printStackTrace();
}
super.loadUrl(Config.getStartUrl());
}
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();
}
7)然后在js文件中添加代码段。
$(document).ready(function(e){
document.addEventListener("deviceready", dbConnection, false);
})
function dbConnection(){
db = window.sqlitePlugin.openDatabase("myDB.sqlite", "1.0", "DB", 2000000);
db.transaction(function(tx) {
tx.executeSql("SELECT * from table", [], function(tx, res) {
for(var i=0; i<res.rows.length; i++){ ;
console.log("RESULT:" + res.rows.item(i)['field_name']);
}
});
});
}
更多详情...