How does one check if a table exists in an Android SQLite database?

前端 未结 12 1920
栀梦
栀梦 2020-11-27 12:37

I have an android app that needs to check if there\'s already a record in the database, and if not, process some things and eventually insert it, and simply read the data fr

相关标签:
12条回答
  • 2020-11-27 12:53

    Although there are already a lot of good answers to this question, I came up with another solution that I think is more simple. Surround your query with a try block and the following catch:

    catch (SQLiteException e){
        if (e.getMessage().contains("no such table")){
                Log.e(TAG, "Creating table " + TABLE_NAME + "because it doesn't exist!" );
                // create table
                // re-run query, etc.
        }
    }
    

    It worked for me!

    0 讨论(0)
  • 2020-11-27 12:55

    You mentioned that you've created an class that extends SQLiteOpenHelper and implemented the onCreate method. Are you making sure that you're performing all your database acquire calls with that class? You should only be getting SQLiteDatabase objects via the SQLiteOpenHelper#getWritableDatabase and getReadableDatabase otherwise the onCreate method will not be called when necessary. If you are doing that already check and see if th SQLiteOpenHelper#onUpgrade method is being called instead. If so, then the database version number was changed at some point in time but the table was never created properly when that happened.

    As an aside, you can force the recreation of the database by making sure all connections to it are closed and calling Context#deleteDatabase and then using the SQLiteOpenHelper to give you a new db object.

    0 讨论(0)
  • 2020-11-27 12:57

    i faced that and deal with it by try catch as simple as that i do what i want in table if it not exist will cause error so catch it by exceptions and create it :)

    SQLiteDatabase db=this.getWritableDatabase();
            try{
                db.execSQL("INSERT INTO o_vacations SELECT * FROM vacations");
                db.execSQL("DELETE FROM vacations");
            }catch (SQLiteException e){
                db.execSQL("create table o_vacations (id integer primary key ,name text ,vacation text,date text,MONTH text)");
                db.execSQL("INSERT INTO o_vacations SELECT * FROM vacations");
                db.execSQL("DELETE FROM vacations");
            }
    
    
    0 讨论(0)
  • 2020-11-27 13:05

    Try this one:

    public boolean isTableExists(String tableName, boolean openDb) {
        if(openDb) {
            if(mDatabase == null || !mDatabase.isOpen()) {
                mDatabase = getReadableDatabase();
            }
    
            if(!mDatabase.isReadOnly()) {
                mDatabase.close();
                mDatabase = getReadableDatabase();
            }
        }
    
        String query = "select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'";
        try (Cursor cursor = mDatabase.rawQuery(query, null)) {
            if(cursor!=null) {
                if(cursor.getCount()>0) {
                    return true;
                }
            }
            return false;
        }
    }
    
    0 讨论(0)
  • 2020-11-27 13:05
     public boolean isTableExists(String tableName) {
        boolean isExist = false;
        Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '" + tableName + "'", null);
        if (cursor != null) {
            if (cursor.getCount() > 0) {
                isExist = true;
            }
            cursor.close();
        }
        return isExist;
    }
    
    0 讨论(0)
  • 2020-11-27 13:06

    Important condition is IF NOT EXISTS to check table is already exist or not in database

    like...

    String query = "CREATE TABLE IF NOT EXISTS " + TABLE_PLAYER_PHOTO + "("
                + KEY_PLAYER_ID + " TEXT,"
                + KEY_PLAYER_IMAGE + " TEXT)";
    db.execSQL(query);
    
    0 讨论(0)
提交回复
热议问题