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

22

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

public static long queryNumEntries (SQLiteDatabase db, String table)

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

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

7 ответов

31

вы можете выполнить 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
источник
  • хорошо работает. Я немного изменил, но я не знаю, что это будет проблемой в будущем. Я удалил первую строку SQLiteDatabase db = table.getWritableDatabase (); и в начале класса я определил свою базу данных как статичную, как это: private static SQLiteDatabase mDb; –  mehmet 25.03.2014 в 15:57
  • вы тоже можете объявить, но почему вы определяете static.? –  Waqar Ahmed 25.03.2014 в 18:53
  • из-за предложения eclipse –  mehmet 26.03.2014 в 08:18
  • это не оптимальные решения. Поскольку все знают, что метод подсчета занимает больше времени для выполнения запроса, используйте запрос select exists вместо count () –  Dwivedi Ji 28.08.2014 в 13:07
  • Это работает хорошо. Я поместил мой метод, который возвращает int и присваивает значение курсора возвращаемому значению. Затем я использовал этот метод в выражении if, основанном на его возвращаемом значении, и если он равнялся 0, делайте что-нибудь еще, чтобы ничего не говорить. Мне пришлось добавить некоторые записи в разделы if, чтобы отслеживать его шаги в DDMS и отфильтровать теги для четкого тега чтения: операции с базой данных. то есть Log.v (TAG, «Некоторая таблица не пуста»); спасибо @Waqar Ahamed –  natur3 30.12.2014 в 18:47
Показать остальные комментарии
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
источник
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;
    }
    
ответ дан Dwivedi Ji 28.08.2014 в 13:08
источник
2

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

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
источник
  • По соображениям производительности я бы предложил добавить «LIMIT 1». –  Antonio Vlasic 14.05.2018 в 07:58
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
источник
  • // db.close (); Что это? –  mehmet 25.03.2014 в 11:48
  • это прокомментированная строка. Вы можете пропустить это для своей цели. Удалено для вашей цели. –  My God 25.03.2014 в 11:55
  • Это проверит, существует ли таблица, а не есть ли в ней данные. –  laalto 25.03.2014 в 11:57
  • да laalto прав, он всегда возвращает инструкцию else, используя существующую базу данных активов. –  mehmet 25.03.2014 в 15:41
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
источник
  • Пожалуйста, укажите объяснение своего ответа. –  xpereta 10.11.2016 в 13:27
  • @xpereta moveToFirst () проверить таблицу и вернуть true, если таблица пуста. –  Денис Климков 10.11.2016 в 14:50
  • @xpereta moveToFirst () проверить таблицу и вернуть true, если таблица пуста. –  Денис Климков 10.11.2016 в 14:50
  • Пожалуйста, включите объяснение в фактический ответ, а не в комментарии. Также объясните, почему вы говорите, что лучше, чем другие ответы. –  xpereta 10.11.2016 в 15:07