애셋 디렉토리에서 SQLite 데이터베이스를 복사하여 나중에 액세스하려고합니다. 그러나 나는 그것을하지 못한다!애셋에서 SQLite 데이터베이스를 복사 할 수 없습니다.
public class DatabaseAdapter {
private static String DB_PATH = "/data/data/com.mypackage/databases/";
private static String DB_NAME = "database.sqlite";
private static String TABLE_NAME = "content_table";
private SQLiteDatabase database = null;
private final Context context;
public DatabaseAdapter(Context context){
this.context = context;
}
private void openDatabase() throws SQLiteException{
DatabaseHelper databaseHelper = new DatabaseHelper(context, DB_NAME);
SQLiteDatabase db = null;
if(!checkDatabase()){
try{
//Tried to create db before copying, so file should exist
db = databaseHelper.getReadableDatabase();
db.close();
copyDatabase();
}catch(IOException exception){
Log.d("DatabaseAdapter", "Error copying DB: "+exception);
}
}
database = SQLiteDatabase.openDatabase(DB_PATH+DB_NAME, null, SQLiteDatabase.OPEN_READONLY);
}
private void closeDatabase(){
database.close();
}
public ArrayList<String> queryCategories(){
try{
openDatabase();
}catch(SQLiteException exc){
exc.printStackTrace();
}
//.............................
return result;
}
private boolean checkDatabase(){
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
private void copyDatabase() throws IOException{
InputStream inputStream = context.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream outputStream = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer))>0){
outputStream.write(buffer, 0, length);
}
outputStream.flush();
outputStream.close();
inputStream.close();
}
}
DatabaseHelper은 간단하다 :
ublic class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name){
super(context, name, null, 1);
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
시도 다! 나는 연장과 함께 노는 시도했다! 하지만 여전히 오류가 발생합니다 : DB 복사 중 오류 : java.io.FileNotFoundException: /data/data/com.mypackage/databases/database.sqlite (No such file or directory)
에뮬레이터에서 검사했는데 파일이 있으므로 거기에 쓸 수 있어야합니다. 제발, 어떤 도움이! 그것은 나를 미치게합니다!
UPD SD 카드에 올려 놓았습니다. 하지만 여전히 애플 리케이션 데이터 폴더에 쓸 수없는 이유를 얻을 수 없습니다.
감사합니다! 작동했는데, 지금 무엇이 잘못되었는지 알아 내려고 노력할 것입니다 –
어떻게 복사 된 데이터베이스에 레코드를 추가 할 수 있습니까? –