实际上SQLiteOpenHelper
负责您的数据库创建、升级等等。如果要以编程方式创建表,则必须在类的 onCreate 方法中编写创建表查询SQLiteOpenHelper
。如果要在先前创建的数据库之后更新数据库,则可以在 onUpgrade 方法中编写修改后的表的查询,只有您将拥有更改数据库版本。
如果您已经在外部创建了一个数据库并且想要使用该数据库,那么您必须将该数据库放在 assets 文件夹中,并将该文件复制到位于该文件夹中的数据库文件/data/data/packagename/databases
夹中。
这是将数据库从资产复制到数据库文件夹的示例
private static boolean copyDataBase(Context c) throws IOException {
String DB_PATH = "/data/data/" + c.getPackageName() + "/databases/";
AssetManager mg = c.getResources().getAssets();
InputStream myInput = null;
try {
myInput = mg.open(DATABASE_NAME);
} catch (IOException ex) {
return false;
}
if (myInput != null) {
String outFileName = DB_PATH + DATABASE_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[8000];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
Log.d(TAG, "Database is copied");
return true;
}
return false;
}
这是检查数据库及其副本版本的方法
public void copyDatabase() {
try {
SharedPreferences preferences = c.getSharedPreferences(c.getPackageName(), Context.MODE_PRIVATE);
if (checkDataBase(c)) {
if (preferences.getInt("dbversion", 0) != 0) {
c.deleteDatabase(DatabaseHelper.DATABASE_NAME);
}
}
getReadableDatabase();
close();
if (copyDataBase(c)) {
Editor editor = preferences.edit();
editor.putInt("dbversion", DatabaseHelper.DATABASE_VERSION);
editor.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
这是检查数据库是否已经存在的示例?
public static boolean checkDataBase(Context c) {
File f = new File("/data/data/" + c.getPackageName() + "/databases/"
+ DATABASE_NAME);
if (!f.exists())
return false;
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase
.openDatabase("/data/data/" + c.getPackageName()
+ "/databases/" + DATABASE_NAME, null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
e.printStackTrace();
}
return checkDB != null ? true : false;
}