在Android的依附SQLite数据库用SQLiteOpenHelper [英] ATTACH sqlite database in Android with SQLiteOpenHelper
问题描述
我在创建引用键在另一个数据库中的数据库的过程。从本质上讲,我有我想保持分开的,这将改变数据的导入,但如果可能的话,我想通过一个外部关键字
引用的其他键。所以,据我所知,我需要首先将数据库来实现这一目标。这里的德相关code到目前为止:
I'm in the process of creating a database that references keys in another database. Essentially, I have an import of data that I want to keep separate from one that will change, but if possible, I would like to reference the other keys via a FOREIGN KEY
. So far as I know, I need to attach the database first to make that happen. Here's teh relevant code so far:
public class LogDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "log.db";
private static final int DATABASE_VERSION = 1;
private String namesDb;
public LogDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
namesDb=getNamesDbPath();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("ATTACH DATABASE ? AS names",new String[]{namesDb});
StringBuilder query=new StringBuilder();
query.append("CREATE TABLE log (");
}
}
不过,这似乎并没有工作,因为我得到了以下错误:
However, this doesn't seem to work, as I'm getting the following error:
11-21 17:35:58.176: E/SQLiteLog(9984): (1) statement aborts at 5: [ATTACH DATABASE ? AS names] cannot ATTACH database within transaction
11-21 17:35:58.176: D/AndroidRuntime(9984): Shutting down VM
11-21 17:35:58.176: W/dalvikvm(9984): threadid=1: thread exiting with uncaught exception (group=0x41a21700)
11-21 17:35:58.191: E/AndroidRuntime(9984): FATAL EXCEPTION: main
11-21 17:35:58.191: E/AndroidRuntime(9984): android.database.sqlite.SQLiteException: cannot ATTACH database within transaction (code 1)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:734)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
11-21 17:35:58.191: E/AndroidRuntime(9984): at com.kd7uiy.hamfinder.LogDatabaseHelper.onCreate(LogDatabaseHelper.java:27)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
11-21 17:35:58.191: E/AndroidRuntime(9984): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
我怎样才能使这项工作?
How can I make this work?
推荐答案
我想出了一个办法,使其工作,我不是特别自豪,但它的工作。如果连接数据库时,你不能在一个事务中,那么首先结束交易。
I figured out a way to make it work, that I'm not particularly proud of, but it does the job. If you can't be in a transaction when attaching a database, then end the transaction first.
db.setTransactionSuccessful();
db.endTransaction();
db.execSQL("ATTACH DATABASE ? AS names",new String[]{namesDb});
db.beginTransaction();
这篇关于在Android的依附SQLite数据库用SQLiteOpenHelper的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!