第一种:用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:前几天面试被面试官问到过这个问题。