2016-05-17 41 views
0

我想顯示一個警告框如果表不存在或表內容爲空。安卓與Sqlite - 如何檢查表是否存在,如果空

要檢查表是空的,我使用:

 cCheckDB = db.rawQuery("SELECT COUNT(*) FROM " + MainActivity.TABLE_NAME +"", null); 

     if (cCheckDB != null) { 
      cCheckDB.moveToFirst(); 

      if (cCheckDB.getInt (0) == 0) { 
       // EMPTY 
      } 
     } 

如何在「如果表中存在」包裝呢?什麼是最好的方法?

我知道兩種方法來檢查表是否存在或檢查是否有內容。但是,如果可能的話,我希望以有意義的方式使用檢查,而不是單個查詢 - 這是我的問題。

+1

請檢查該流http://stackoverflow.com/questions/3058909/how-does-one-check-if-a-table-exists-in-an-android-sqlite-database –

+0

當然如果不存在,我可以捕獲異常或創建,但對我而言這並不有用。我以爲有另一種方式 – Oli

回答

3

希望,這會對你有所幫助。 它運作良好!

public boolean isTableExists(String tableName, boolean openDb) { 
    if(openDb) { 
     if(mDatabase == null || !mDatabase.isOpen()) { 
      mDatabase = getReadableDatabase(); 
     } 

     if(!mDatabase.isReadOnly()) { 
      mDatabase.close(); 
      mDatabase = getReadableDatabase(); 
     } 
    } 

    Cursor cursor = mDatabase.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null); 
    if(cursor!=null) { 
     if(cursor.getCount()>0) { 
          cursor.close(); 
      return true; 
     } 
        cursor.close(); 
    } 
    return false; 
} 
+0

它的工作。我可以用它來檢查表格是否爲空, – Oli

+0

它只檢查表格存在。 –

+0

我想結合兩項檢查,但看起來這是不可能的。所以我用這個函數和if子句來檢查內容。這對我來說是最好的解決方案 – Oli

1

要檢查你的表存在與否,可以使用:

SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';

在這裏,與你的表名稱替換表名要更改

EX:

SELECT name FROM sqlite_master WHERE type='table' AND name='Employee_Details'; 
+0

你能給我一個代碼示例嗎? – Oli

+0

檢查我編輯的答案。它會給你的結果,如果該表存在 –

+0

因此生病必須分開一個表檢查和一個檢查,如果表是空的。沒有其他方法可以將這兩項檢查結合起來嗎? – Oli

0

更理想的方法是檢查表是否存在,然後ch eck如果記錄存在與否

private void clearTable(String tableName) { 
     int count; 
     Cursor cursor = db.rawQuery("SELECT count(*) FROM sqlite_master WHERE type='table' AND " + 
       "name= " + tableName, null); 
     cursor.moveToFirst(); 
     count = cursor.getInt(0); 
     if (!cursor.isClosed()) 
      cursor.close(); 

     if (count > 0)//table exist now delete record if it exist 
     { 
      cursor=db.rawQuery("select exists(select 1 FROM " + tableName + ")", null); 
      cursor.moveToFirst(); 
      count = cursor.getInt(0); 
      if (!cursor.isClosed()) 
       cursor.close(); 
      if (count > 0) 
       db.execSQL("delete from " + tableName); 
     } 
    } 
+0

任何線索結合這兩個有意義的?多數民衆贊成我想知道:) – Oli

+0

檢查我編輯的答案我測試它在Firefox中的sqlite工具 –

+0

你需要檢查表是否存在首先比檢查記錄存在,因爲沒有組合查詢檢查表存在和記錄在一起。直到我搜索。 –

相關問題