ORMLite在Android上将表从一个数据库插入到另一个数据库的问题

ORMLite在Android上将表从一个数据库插入到另一个数据库的问题,android,database,sqlite,insert,ormlite,Android,Database,Sqlite,Insert,Ormlite,我正在将一个SQLite数据库文件从服务器下载到用户的Android设备上。下载后,我使用下载的数据库在本地数据库中插入或替换一些表。我使用ORMLite 4.47来实现这一点 首先,我将数据库文件附加到数据库连接: DatabaseConnection con = null; con = conSrc.getReadWriteConnection(); con.executeStatement("attach database '" + localDatabase.getAbsolutePat

我正在将一个SQLite数据库文件从服务器下载到用户的Android设备上。下载后,我使用下载的数据库在本地数据库中插入或替换一些表。我使用ORMLite 4.47来实现这一点

首先,我将数据库文件附加到数据库连接:

DatabaseConnection con = null;
con = conSrc.getReadWriteConnection();
con.executeStatement("attach database '" + localDatabase.getAbsolutePath() + "' as '" + localDb + "'", DatabaseConnection.DEFAULT_RESULT_FLAGS);
con.executeStatement("attach database '" + downloadedDatabase.getAbsolutePath() + "' as '" + remoteDb + "'", DatabaseConnection.DEFAULT_RESULT_FLAGS);
附加数据库后,我创建以下查询以从下载的数据库(remoteDb)复制到本地数据库(localDb):

之后,我从ORMLite执行以下函数:

con.executeStatement(query, flags); 
该功能在Android版本4.1(含SQLite 3.7.11)及更高版本上运行良好。但我在Android版本4.0和4.0.3(使用SQLite 3.7.4)上遇到以下错误:


我怎样才能解决这个问题?是否有更好的方法将大量信息下载到设备上?

我是这个问题作者的同事,我设法找到了避免这个问题的方法。我想我会把它贴在这里,以防其他人遇到同样的问题

具有该特定操作系统版本的Android设备似乎存在以下Ormlite命令序列的问题:

DatabaseConnection con = null;
con = conSrc.getReadWriteConnection();
con.executeStatement("attach database '" + localDatabase.getAbsolutePath() + "' as '" + localDb + "'", DatabaseConnection.DEFAULT_RESULT_FLAGS);
con.executeStatement("attach database '" + downloadedDatabase.getAbsolutePath() + "' as '" + remoteDb + "'", DatabaseConnection.DEFAULT_RESULT_FLAGS);
我不知道这是由预装在这些设备上的SQLite3版本引起的,还是由其他原因引起的

现在我们可以避免这种情况,因为我们可以(幸运地)避免在这种情况下使用Ormlite。SQLite语句“AttachDatabase”不需要在DatabaseConnection实例上执行,它可以在本地数据库文件上执行。因此,与前一个块不同,只需要以下语句:

db.execSQL("ATTACH DATABASE '" + tempDb.getAbsolutePath() + "' AS '" + remoteDb + "'");
其中
db
是本地数据库的
SQLiteDatabase
实例。 缔约国指出:

“ATTACH DATABASE语句将另一个数据库文件添加到当前数据库连接中。”


这就是为什么不需要
数据库连接
实例的原因。

我不太喜欢这个Matthias,但请告诉我是否需要ORMLite在这里做些什么来改进它。
DatabaseConnection con = null;
con = conSrc.getReadWriteConnection();
con.executeStatement("attach database '" + localDatabase.getAbsolutePath() + "' as '" + localDb + "'", DatabaseConnection.DEFAULT_RESULT_FLAGS);
con.executeStatement("attach database '" + downloadedDatabase.getAbsolutePath() + "' as '" + remoteDb + "'", DatabaseConnection.DEFAULT_RESULT_FLAGS);
db.execSQL("ATTACH DATABASE '" + tempDb.getAbsolutePath() + "' AS '" + remoteDb + "'");