一次使用多个SQLite数据库

我有两个SQLite数据库,一个是从服务器( server.db )下载的,一个是用作客户端( client.db )上存储的数据库。我需要使用服务器数据库中的数据在客户端数据库上执行各种同步查询。

例如,我想要删除 client.db tRole 表中的所有行,并使用 server.db tRole 表中的所有行重新填充。

另一个示例,我想删除 client.db tFile 表中 fileID 不在 server.db tFile 表中的所有行。

在SQL Server中,您可以在表格前添加数据库的名称。无论如何,在使用Adobe Air的SQLite中这样做?

0
额外 编辑
意见: 1
“从数据库级别无法做到这一点。”怎么会这样? SQLite有一个 attach 关键字,它允许你连接另一个数据库。 Theo的回答显示Air似乎有相应的API调用。当你特意说“从数据库级别”时,我是否有一些区别?
额外 作者 spaaarky21,

2 答案

可以在Sqlite中一次打开多个数据库,但是在使用Flex / AIR时是否可以完成是个疑问。在命令行客户端中,运行 ATTACH DATABASE path / to / other.db AS otherDb ,然后您可以将该数据库中的表称为 otherDb.tableName ,就像在MySQL中一样或SQL Server。

使用语法database-name.table-name可以引用附加数据库中的表。

     

sqlite.org上的ATTACH DATABASE文档

0
额外

我只查看了AIR SQL API,并且 SQLConnection 上有一个 attach 方法,它看起来正是您需要的。

我没有测试过这个,但根据文档它应该工作:

var connection : SQLConnection = new SQLConnection();

connection.open(firstDbFile);
connection.attach(secondDbFile, "otherDb");

var statement : SQLStatement = new SQLStatement();

statement.connection = connection;
statement.text = "INSERT INTO main.myTable SELECT * FROM otherDb.myTable";
statement.execute();

该代码snipplet中可能存在错误,我最近在AIR SQL API上工作不多。请注意,使用 open 打开的数据库表可以使用 main.tableName ,任何附加的数据库都可以被赋予任何名称( otherDb 在上面的例子中)。

0
额外