Sqlite Проверьте, нет ли таблицы

17

Ну, у меня есть база данных, и у нее много таблиц. но в целом таблицы пустые. Я хочу проверить, пуста ли таблица базы данных. Таблица IF пуста, программа заполнит ее.

public static long queryNumEntries (SQLiteDatabase db, String table)

Я буду использовать его, но он запрашивает API 11.

    
задан mehmet 25.03.2014 в 10:29
источник

7 ответов

29

вы можете выполнить select count(*) from table и проверить, будет ли count> 0 , а затем оставить else, заполнить его.

как

 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
    
ответ дан Waqar Ahmed 25.03.2014 в 10:32
источник
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;
    
ответ дан Luca Sepe 25.03.2014 в 10:33
источник
4

Оптимальные решения

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;
    }
    
ответ дан Dwivedi Ji 28.08.2014 в 13:08
источник
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;
}
}
    
ответ дан My God 25.03.2014 в 10:33
источник
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;
    }
}
    
ответ дан Mahesh Uligade 28.11.2017 в 17:37
источник
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 , если таблица пуста. Ответ, который отмечен правильно - использует дополнительную проверку.

    
ответ дан Денис Климков 10.11.2016 в 13:04
источник
0

Вот лучший вариант:

public boolean validateIfTableHasData(SQLiteDatabase myDatabase,String tableName){
    Cursor c = myDatabase.rawQuery("SELECT * FROM " + tableName,null);
    return c.moveToFirst();
}
    
ответ дан Juan Pablo Arango 27.11.2017 в 03:00
источник