Here is the code I am using:
public class DataBaseHelper extends SQLiteOpenHelper {
private static final String DB_PATH = "/data/data/com.project.mydb/databases/";
private static final String DB_NAME = "mydb.db";
private static final String DB_TABLE = "words";
private static final int DB_VERSION = 6;
private static final String TAG = "DataBaseHelper";
int id = 0;
Random random = new Random();
private SQLiteDatabase myDataBase;
private final Context myContext;
public DataBaseHelper(Context context){
super(context, DB_NAME, null, DB_VERSION);
this.myContext = context;
}
@Override
public void onCreate(SQLiteDatabase db){
createDB();
}
@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion){
Log.w(TAG, "Upgrading DB from version " + oldVersion + " to " +
newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
onCreate(db);
}
public void createDataBase(){
createDB();
}
private void createDB(){
boolean dbExist = dbExists();
if(!dbExist){
copyDataBase();
}
else if(dbExist){
copyDataBase();
}
}
private boolean dbExists(){
SQLiteDatabase db = null;
try{
String dbPath = DB_PATH + DB_NAME;
db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
db.setVersion(DB_VERSION);
}
catch(SQLiteException e){
Log.e("SQL Helper", "database not found");
}
if(db != null){
db.close();
}
return db != null ? true : false;
}
private void copyDataBase(){
InputStream iStream = null;
OutputStream oStream = null;
String outFilePath = DB_PATH + DB_NAME;
try{
iStream = myContext.getAssets().open(DB_NAME);
oStream = new FileOutputStream(outFilePath);
byte[] buffer = new byte[1024];
int length;
while((length = iStream.read(buffer))>0){
oStream.write(buffer,0,length);
}
oStream.flush();
oStream.close();
iStream.close();
}
catch(IOException ioe){
throw new Error("Problem copying database from resource file.");
}
}
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public synchronized void close(){
if (myDataBase != null)
myDataBase.close();
super.close();
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…