2013-11-24 19 views
0

當我嘗試檢查最近表是否爲空時,我得到SQLiteException。我該如何解決這個問題?SQLiteException當我嘗試檢查表是空的

這是我sqlitehelper類:

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class MySQLiteOpenHelper extends SQLiteOpenHelper { 
    private final static int DATABASE_VERSION = 1; 
    private final static String DATABASE_NAME = "LyricsFinderDB"; 

    public MySQLiteOpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database) { 
     // SQL statement to create recent table 
     String CREATE_RECENT_TABLE = "CREATE TABLE recent (" + 
       "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       "name INTEGER)"; 
     database.execSQL(CREATE_RECENT_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { 
     database.execSQL("DROP TABLE IF EXISTS recent"); 
     this.onCreate(database); 
    } 

    public boolean isRecentTableEmpty() { 
     SQLiteDatabase database = this.getReadableDatabase(); 
     Cursor cursor = database.rawQuery("SELECT * FROM recent", null); 

     if(cursor.getCount() > 0) { 
      cursor.close(); 
      return false; 
     } 
     cursor.close(); 
     database.close(); 
     return true; 
    } 
} 

在MainActivity我在代碼中使用它,如:

if(mySQLiteOpenHelper.isRecentTableEmpty()) { 
      //...do something 
     } else { 
      //...do something 
     } 

這是我正在運行的應用程序後,得到了異常:

Caused by: android.database.sqlite.SQLiteException: no such table: recent (code 1): , while compiling: SELECT * FROM recent 

它引發此行:

Cursor cursor = database.rawQuery("SELECT * FROM recent", null); 

回答

1

該表不存在。您可以捕獲SQLiteException異常,並且如果它觸發器創建表並返回TRUE(即表爲空)。像這樣的東西

try { 
    Cursor cursor = database.rawQuery("SELECT * FROM recent", null); 
} 
catch(SQLiteException e) { 
    onCreate(database); 
    return TRUE; 
} 
+0

我知道該表不存在,但爲什麼?在MainActivity中的onCreate()方法,我創建我的數據庫mySQLiteOpenHelper = new MySQLiteOpenHelper(MainActivity.this); – veinhorn

+0

僅當數據庫不存在時纔會調用onCreate。也許它存在(從以前的代碼測試),但它沒有表格。在這種情況下,它也不是創建的。您可以手動刪除它或提升版本ID,以便強制執行onUpdate調用。 –

+0

謝謝。你是對的。現在它工作正常。 – veinhorn

0

首先使用異常。

它看起來像你的表不存在。