web-dev-qa-db-de.com

Abfrage, ob Android-Datenbank vorhanden ist!

Ich habe eine Datenbank für meine Android-App erstellt, die statische Daten enthält und keine Aktualisierungs-/Löschfunktion erfordert. Wenn die App gestartet wird, möchte ich überprüfen, ob die Datenbank vorhanden ist, und wenn nicht, dann meine Klasse dbAdapter ausführen. Ich weiß, es ist eine einfache if-Anweisung, aber ich habe mich nur gefragt, wie man am effizientesten abfragen kann, ob die Datenbank vorhanden ist. 

Prost 

61
Ally
/**
 * Check if the database exist and can be read.
 * 
 * @return true if it exists and can be read, false if it doesn't
 */
private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;
    try {
        checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
                SQLiteDatabase.OPEN_READONLY);
        checkDB.close();
    } catch (SQLiteException e) {
        // database doesn't exist yet.
    }
    return checkDB != null;
}

dabei ist DB_FULL_PATH der Pfad zu Ihrer Datenbankdatei.

Und ich überprüfe nicht nur, ob eine Datei existiert, weil sie nicht sagen würde, ob (a) es eine sqlite-db-Datei ist, (b) die Datei nicht beschädigt ist und tatsächlich gelesen werden kann, dh aufgrund eines teilweisen Downloads oder wie auch immer wurde erschaffen.

77
Mathias Conradt

Ich würde lieber die Existenz der Datei direkt überprüfen:

private static boolean doesDatabaseExist(Context context, String dbName) {
    File dbFile = context.getDatabasePath(dbName);
    return dbFile.exists();
}
156
rds

Wenn Sie die folgende Klasse mit initialisieren:

mOpenHelper = new DatabaseHelper(getContext());

Dadurch wird die Datenbank automatisch erstellt, wenn sie nicht vorhanden ist. Außerdem können Sie die Datenbank aktualisieren, indem Sie DB_VER auf eine höhere Anzahl setzen.

Dann können Sie die Datenbanknutzung abfragen:

 SQLiteDatabase db = mOpenHelper.getWritableDatabase();

die oben genannten erhalten Sie db.query () & db.insert () etc Methoden.

private static class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "db_name.db";
    private static final int DB_VER = 1;

    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VER);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE table_name (" + "_id INTEGER PRIMARY KEY, "
                + " column_name_2 TEXT );");


                .execSQL("INSERT INTO table_name "
                        + "(column_name_2) "
                        + "VALUES " + "('hello world');");


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        Log.w(TAG + "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        try {
            db.execSQL("DROP TABLE IF EXISTS table_name");
            onCreate(db);

        } catch (SQLException e) {
            Log.e(TAG + "getting exception "
                    + e.getLocalizedMessage().toString());
        }
    }

}
4
userdelroot

es ist ganz einfach: Öffnen Sie Ihre Datenbank in try block mit dem Pfad einer Datenbank wie:

try{
   SQLiteDatabase   dbe = SQLiteDatabase.openDatabase("/data/data/bangla.rana.fahim/databases/dictionary", null,0);
            Log.d("opendb","EXIST");
            dbe.close();
            }

wenn eine Ausnahme auftritt, wird die Datenbank nicht beendet, also erstellen Sie sie:

catch(SQLiteException e){
                Log.d("opendb","NOT EXIST");

            SQLiteDatabase db = openOrCreateDatabase("dictionary", MODE_PRIVATE, null);
                    db.execSQL("CREATE TABLE IF NOT EXISTS LIST(wlist varchar);");

                    db.execSQL("INSERT INTO LIST VALUES('খবর');");
                    db.execSQL("INSERT INTO LIST VALUES('কবর');"); //whatever you want
                 db.close();
}

das ist es du bist fertig :)

2
Imran Rana

Ich habe die Version von Mathias Conradt ausprobiert, aber ich habe festgestellt, dass DB! = Null einfach nicht ausreicht. Ich habe das geändert:

         /**
         * Check if the database exist and can be read.
         *
         * @return true if it exists and can be read, false if it doesn't
         */
        private boolean checkDataBase(String InDBFile) {
            SQLiteDatabase checkDB = null;
            boolean res = false;
            try {
                checkDB = SQLiteDatabase.openDatabase(InDBFile, null,
                        SQLiteDatabase.OPEN_READONLY);
                res = (checkDB.getVersion() > 0);
                checkDB.close();
            } catch (SQLiteException e) {
                // database doesn't exist yet.
                Log.e("checkDataBase", "Selected file could not be opened as DB.");

                res = false;
            }
            return res;
        }
1
Holger Behrens

Erstellen Sie in Ihrer Hauptaktivität ein globales Datenbankhelfer-Klassenobjekt. Versuchen Sie Folgendes in der Funktion onCreate () von MainActivity:

//global database helper variable

DatabaseHelper dbh;

//in the onCreate()

if(dbh.getReadableDatabase()!=null)
//view the list

else
//create db
0
himanreddy