天天看点

Android几种打开SQLite的方法

第一种:用SQLiteOpenHelper辅助类

  SQLiteOpenHelper类可以用来创建或打开数据库,两个关键的方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。当新建一个数据库时会调用前者,一般在里面做一些创建表或视图的操作。数据库版本升级时则会调用后者。

  当第一次调用getReadableDatabase()方法或getWritableDatabase()方法即可返回一个SQLiteDatabase对象。如果是第一次调用,则会创建数据库。随后可使用SQLiteDatabase对象的方法进行数据操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。

  PS:通过该方法创建的数据库存放的目录是固定的,其路径为/data/data/packageName/databases/

第二种:用Context类的openOrCreateDatabase()方法

  openOrCreateDatabase(String dbName, int mode, CursorFactory factory);

  dbName:数据库操作模式:默认值为MODE_PRIVATE(0),可选值:MODE_WORLD_READABLE, MODE_WORLD_WRITABLE, MODE_ENABLE_WRITE_AHEAD_LOGGING

  factory:附加的一个工厂类,当SQLiteDatabase实例的query函数被调用时,会使用该工厂类返回一个Cursor。可为null。

PS:该方法得到的数据库文件,其存储路径与上一方法相同。

第三种:直接调用SQLiteDatabase类的静态方法openOrCreateDatabases()

SQLiteDatabase类有几个静态方法可直接打开或创建数据库。

//等同于openDatabase(path, factory, SQLiteDatabase.CREATE_IF_NECESSARY)

openOrCreateDatabase(String path, CursorFactory factory)

//等同于openDatabase(file.getPath(), factory, SQLiteDatabase.CREATE_IF_NECESSARY)

openOrCreateDatabase(File file, CursorFactory factory)

//等同于openDatabase(file.getPath(), factory, SQLiteDatabase.CREATE_IF_NECESSARY, errorHandler)

openOrCreateDatabase(String path, CursorFactory factory, DatabaseErrorHandler errorHandler)

PS:该方法打开或创建的数据库文件可与上述两个方法的路径不同。

还是上个代码看着更爽

1 //第一种
 2         SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
 3         db.execSQL("alter table info add number1 vchar(20)");
 4 
 5         //第二种
 6         //获取info.db的路径
 7         File file = new File(getApplication().getDatabasePath("info.db").getPath());
 8         SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(file,null);
 9         db1.execSQL("alter table info add number2 vchar(20)");
10 
11         //第三种,
12         SQLiteDatabase db2 = this.openOrCreateDatabase("info.db",0,null);
13         db.execSQL("alter table info add number3 vchar(20)");      

ps:前几天面试被面试官问到过这个问题。

转载于:https://www.cnblogs.com/Godfunc/p/6022102.html