【发布时间】:2015-07-22 12:46:18
【问题描述】:
我有两个 android 应用程序(一个用 js 编写(使用 phonegap),另一个用 java 编写)。两者都需要访问一个 SQLite DB。 Yes it's possible.
在我的 js 文件中,我使用 Cordova-sqlite-storage 创建数据并将其插入到数据库中:
var db = window.sqlitePlugin.openDatabase({name: "CAC.db", location: 1});
db = sqlitePlugin.openDatabase({name: "CAC.db", location: 2, createFromLocation: 1});
db.transaction(function(tx) {
tx.executeSql('DROP TABLE IF EXISTS test_table');
tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');
// demonstrate PRAGMA:
db.executeSql("pragma table_info (test_table);", [], function(res) {
console.log("PRAGMA res: " + JSON.stringify(res));
});
tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["MY ID", 100], function(tx, res) {
db.transaction(function(tx) {
tx.executeSql("select data as dt from test_table;", [], function(tx, res) {
var id = res.rows.item(0).dt;
console.log("res.rows.item(0).cnt: " + id);
});
});
}, function(e) {
console.log("ERROR: " + e.message);
});
});
然后我使用this answer 尝试将 java 应用程序连接到我预先存在的数据库:
Context sharedContext = null;
try {
sharedContext = this.createPackageContext("com.my.app", Context.CONTEXT_INCLUDE_CODE);
if (sharedContext == null) {
return;
}
} catch (Exception e) {
String error = e.getMessage();
return;
}
DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext);
sharedDBadapter.open();
但是我需要在我的 js 应用程序中使用此代码:
DBadapter hostDBAdapter = new DbAdapter(getApplicationContext());
performerDBadapter.open();
尝试获取它的上下文。 (但显然我不能,因为这段代码^是java)。所以我尝试使用this answer.(Context context=this.cordova.getActivity().getApplicationContext();) 获取上下文,但我不确定在哪里添加它,我什至不确定这段代码是否能正常工作。
我的问题是:
- 我应该在我的应用程序中的哪里添加this code?
- 我在正确的道路上吗?
- 在 Android 上将 js 应用程序和 Java 应用程序连接到同一个 SQLite 数据库的最佳方法是什么? (例子会很有帮助)
信息:
安卓 5.1, 科尔多瓦 5.0
更新:
我已经在两个应用程序中拥有android:sharedUserId="my.app"。
【问题讨论】:
标签: java android sqlite cordova phonegap-plugins