Sqlite3.c使用版本3.7.17和adb shell Sqlite3——版本是3.7.4.它会给我的应用程序带来任



我无法打开数据库异常。只有在长时间运行后,当我触摸我的应用程序时,我才会得到这个例外。

所以我的问题是:版本差异会是这次崩溃的原因吗?如何将adb shell sqlite3--版本升级到sqlite3版本3.7.17

我正在使用ICS Os。

我的问题的任何其他解决方案都将对有所帮助

这是我在java层上的代码

 public static DatabaseHandler getInstance(Context context) {
    if (oDatabaseHandler == null) 
    {
        oDatabaseHandler = new DatabaseHandler(context.getApplicationContext());
    }
    return oDatabaseHandler;
   }

public DatabaseHandler(Context context) 
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     String path =   context.getDatabasePath(DatabaseHandler.DATABASE_NAME).toString();  
}

//创建表

     @Override
    public void onCreate(SQLiteDatabase db) 
     {
    String CREATE_TABLE_DIAGNOSIS        = "CREATE TABLE IF NOT EXISTS  " + TABLE_Diagnosistble + "("+KEY_DiagID+ " TEXT PRIMARY KEY ," +KEY_PName+ " TEXT ," +KEY_HospitalNumber+ " TEXT ," +KEY_Gender+ " TEXT ," + KEY_Pacemaker+ " TEXT ," +KEY_DiagType+ " TEXT , " +KEY_Age+ " TEXT ," + KEY_D_DeviceID+ " TEXT ," +KEY_D_DiagStrtTime+ " TEXT ," +KEY_D_DiagEndTime+ " TEXT ," +KEY_D_DiagStatus+ " TEXT ," +KEY_D_ReportStatus+ " TEXT , " +KEY_D_UploadStatus+ " TEXT , " +KEY_D_ChestLead1+ " TEXT ," +KEY_D_ChestLead2+ " TEXT " + ");"; 
    db.execSQL(CREATE_TABLE_DIAGNOSIS);
    String CREATE_TABLE_PASTEVENTS       = "CREATE TABLE IF NOT EXISTS  " + TABLE_Pasteventstble + "("+KEY_SerNo+ " INTEGER ," +KEY_Trans_ID+ " TEXT ," +KEY_PEDiagID+ " TEXT ," +KEY_AlarmID+ " INTEGER ," +KEY_PktCounter+ " INTEGER  , "+KEY_EventNo+" INTEGER ," +KEY_StartTime+ " TEXT ," +KEY_EndTime+ " TEXT , " + KEY_ECG_UploadStatus+ " TEXT , " + KEY_ECGMode+ " INTEGER " + ");";
    db.execSQL(CREATE_TABLE_PASTEVENTS);
} 

这是FetchLastDiagID//获取上次创建的诊断ID

   public HistoryTble FetchLastDiagnosisID()
{   
  String selectQuery = "SELECT  * FROM " + TABLE_Historytble + ""; 
  SQLiteDatabase db = this.getWritableDatabase(); 
  if(db == null)
      return null;
  Cursor cursor = db.rawQuery(selectQuery, null);
 HistoryTble  oHistryTble  = new HistoryTble();
try
{
  if(cursor.getCount() > 0)
  {
   if (cursor.moveToFirst()) 
     do 
     { 
         oHistryTble.SetDiagnosisID(cursor.getString(1));
     } while(cursor.moveToNext());  
  }
  else
  {
      oHistryTble = null;
  }
}
finally
{
  if(db != null)
  {
      cursor.close();
      db.close();
  }
}
  return oHistryTble;
}

这是我的故障日志

       Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)
at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1051)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:779)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
at com.cdl.Database.DatabaseHandler.FetchLastDiagnosisID(DatabaseHandler.java:845)
at com.cdl.mircam.DiagCreation.GenerateDiagID(DiagCreation.java:1141)
at com.cdl.mircam.DiagCreation.onCreate(DiagCreation.java:249)
at android.app.Activity.performCreate(Activity.java:4465)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
... 11 more

我在NDK层中使用Sqlite函数调用。

对于每次sqlite函数调用,我都使用

sqlite3_finalize(HRLY_stmt);
HRLY_Result = sqlite3_close_v2(HRLY_db);

但在一个函数中,我关闭了数据库而没有完成。经过长时间的跑步,这给我带来了问题。我在应用层上收到了这个异常(说无法打开数据库异常)

注意:请确保任何条件下的数据库只有在完成后才关闭数据库。

相同的问题在UI Tap 上长期运行时导致TransactionTooLarge异常

总之,它解决了我的两个问题

  1. Sqlite无法打开长期运行中出现的数据库异常

  2. 在长期运行的中看到TransactionToolarge异常

最新更新