2014-03-25 53 views
21

那麼,我有一個數據庫,它有很多的表。但通常表格是空的。 我想檢查數據庫表是否爲空。 如果表格爲空,程序將填充它。Sqlite檢查表是否爲空

public static long queryNumEntries (SQLiteDatabase db, String table) 

我會用它,但它requre API 11

+2

的可能重複[我如何檢查,看看我的SQLite表中有數據?](http://stackoverflow.com/questions/ 4397757 /如何我可以看看如果我的sqlite表有數據在它) – nikis

回答

30

可以執行select count(*) from table並檢查是否count> 0然後讓別人來填充它。

SQLiteDatabase db = table.getWritableDatabase(); 
String count = "SELECT count(*) FROM table"; 
Cursor mcursor = db.rawQuery(count, null); 
mcursor.moveToFirst(); 
int icount = mcursor.getInt(0); 
if(icount>0) 
//leave 
else 
//populate table 
+0

以及它的工作。我已經修改了一些,但我不知道它會在未來提出問題。我已經刪除第一行'SQLiteDatabase db = table.getWritableDatabase();'並且在類的開頭,我已經將數據庫定義爲** static **,如下所示:'private static SQLiteDatabase mDb;' – mehmet

+0

您也可以聲明但爲什麼你要定義靜態。? –

+0

因爲日食暗示 – mehmet

6

做一個SELECT COUNT

boolean empty = true 
Cursor cur = db.rawQuery("SELECT COUNT(*) FROM YOURTABLE", null); 
if (cur != null && cur.moveToFirst()) { 
    empty = (cur.getInt (0) == 0); 
} 
cur.close(); 

return empty; 
1

這是你如何能做到這 -

if(checkTable("TABLE")) 
{ 
    //table exists fill data. 
} 

方法來檢查表 -

public static boolean checkTable(String table) { 
Cursor cur2 = dbAdapter.rawQuery("select name from sqlite_master where name='" 
     + table + "'", null); 

if (cur2.getCount() != 0) { 
    if (!cur2.isClosed()) 
     cur2.close(); 
    return true; 
} else { 
    if (!cur2.isClosed()) 
     cur2.close(); 
    return false; 
} 
} 
+0

// db.close();那是什麼? – mehmet

+0

這是註釋行。你可以跳過這個目的。爲了您的目的而刪除。 –

+0

這將檢查表是否存在,而不是它是否有數據。 – laalto

5

最優解

public boolean isMasterEmpty() { 

    boolean flag; 
    String quString = "select exists(select 1 from " + TABLE_MASTERS + ");"; 

    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.rawQuery(quString, null); 
    cursor.moveToFirst(); 
    int count= cursor.getInt(0); 
    if (count ==1) { 
     flag = false; 
    } else { 
     flag = true; 
    } 
    cursor.close(); 
    db.close(); 

    return flag; 
    } 
0

我認爲,這個解決方案是更好的:

boolean flag; 

    DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext(), DatabaseHelper.DATABASE_NAME, null, DatabaseHelper.DATABASE_VERSION); 
    try { 
     sqLiteDatabase = databaseHelper.getWritableDatabase(); 
    } catch (SQLException ex) { 
     sqLiteDatabase = databaseHelper.getReadableDatabase(); 
    } 
    String count = "SELECT * FROM table"; 
    Cursor cursor = sqLiteDatabase.rawQuery(count, null); 
    if (cursor.moveToFirst()){ 
     flag = false; 
    } else { 
     flag = true; 
    } 
    cursor.close(); 
    sqLiteDatabase.close(); 

    return flag; 

moveToFirst()檢查表,並返回true,如果表是空的。標記爲正確的答案 - 使用額外的檢查。

+1

請包括你的答案的解釋。 – xpereta

+0

@xpereta moveToFirst()檢查表並返回true,如果表爲空。 –

+0

@xpereta'moveToFirst()'檢查表並返回'true',如果表爲空。 –

0

這裏是一個更好的選擇:

public boolean validateIfTableHasData(SQLiteDatabase myDatabase,String tableName){ 
    Cursor c = myDatabase.rawQuery("SELECT * FROM " + tableName,null); 
    return c.moveToFirst(); 
} 
1
public boolean isEmpty(String TableName){ 

    SQLiteDatabase database = this.getReadableDatabase(); 
    int NoOfRows = (int) DatabaseUtils.queryNumEntries(database,TableName); 

    if (NoOfRows == 0){ 
     return true; 
    }else { 
     return false; 
    } 
}