android调用sqlite数据库,使用SQLiteOpenHelper在Android中连接sqlite数据库

在尝试创建一个数据库并使用外键引用另一个数据库的键时遇到错误。错误信息提示不能在事务中执行ATTACH DATABASE语句。这个问题发生在Android的SQLiteOpenHelper的onCreate()方法中,导致应用崩溃。解决方案可能涉及到取消当前事务或在ATTACH DATABASE语句前确保没有开启事务。
摘要由CSDN通过智能技术生成

我正在创建一个数据库,该数据库引用另一个数据库中的键.本质上,我要导入的数据要与将要更改的数据分开,但是如果可能的话,我想通过外键引用其他键.据我所知,我需要先附加数据库才能实现这一点.到目前为止,这是相关的代码:

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 (");

}

}

但是,这似乎不起作用,因为出现了以下错误:

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)

我该如何进行这项工作?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值