我有两个Android应用程序(一个用js编写(使用phonegap)另一个用java编写)。两者都需要访问一个SQLite DB。 Yes it's possible.
在我的js文件中,我使用Cordova-sqlite-storage创建数据并将数据插入db:
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应用程序连接到我之前存在的db:
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();
)来获取上下文但是我不知道在哪里添加它,我甚至不确定这段代码是否会起作用。
我的问题是:
信息:
Android 5.1, 科尔多瓦5.0
更新:
我在两个应用中都已android:sharedUserId="my.app"
。
答案 0 :(得分:1)
1)它取决于你的应用程序,请阅读一些关于android的书,并能够将代码放在你需要的地方。您还可以使用GreenDAO更简单地访问sqlite
3)您可以使用相同的证书签署2个不同的应用程序,这样两个应用程序被识别为“相同的用户ID”并且可以共享私人数据
2)这是一种方式,但一种好方法(最好的方法)是在android上的两个app之间公开数据就是使用content provider
我希望这可以帮到你
答案 1 :(得分:0)
两者都使用不同的数据库,在这种情况下我建议使用以下插件:
<强> https://github.com/brodysoft/Cordova-SQLitePlugin 强>
但是, SQLite 是单用户数据库。如果你去&#34;复制数据库&#34;路由,然后你冒着丢失数据的风险。如果桌面用户添加了数据且iOS用户添加了数据,则复制文件时某人的数据将会丢失。
您可以实施自己的&#34;同步&#34;识别数据库之间的变化并使它们保持同步的算法。这可能是一种痛苦,但这是一种常见的解决方案,也是我所推荐的。我已经通过这种方式为桌面/ iOS应用程序做到了这一点。
您可以选择使用数据库服务器,但这需要网络访问才能连接到它。