2015-11-04 4 views
0

Я создал базу данных sqlite и скопировал файл .db в папку с ресурсами приложения, как указано в вопросе 2605555. Код компилируется в порядке. Во время выполнения он говорит, что не может прочитать файл.Android: Создание базы данных sqlite из db-файла

Я хотел бы использовать готовый .db-файл и хочу создать базу данных только в том случае, если она не существует.

Нужна помощь в создании базы данных с использованием .db-файла.

+0

пожалуйста, напишите код – Nils

ответ

0
@Override 
     public void onCreate(SQLiteDatabase db) { 
    File file=new File("YOUR DBfile PATH"); 
    db.openOrCreateDatabase(file,null,CREATE_IF_NECESSARY); 
    } 
0
package com.airi.buyue.data; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Environment; 

import com.airi.buyue.BuyueApp; 
import com.airi.buyue.R; 
import com.airi.buyue.util.FileUtils; 
import com.airi.buyue.util.Utilities; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 

public class DataManager { 

    public static final String DB_NAME = "zonen.db"; 
    public static final String TABLE_NAME = "m_nzone_copy"; 

    private SQLiteDatabase database; 
    private final Context context; 

    public DataManager(Context context) { 
     this.context = context; 
     getPath(); 
    } 

    public SQLiteDatabase getDatabase() { 
     return database; 
    } 

    public void setDatabase(SQLiteDatabase database) { 
     this.database = database; 
    } 

    public void openDatabase() { 
     this.database = this.openDatabase(getPath() + "/" + DB_NAME); 
    } 

    public String getPath(){ 
     String DATABASE_PATH; 
     if (!Utilities.isSdcardExisting()) { 
      DATABASE_PATH = BuyueApp.get().getFilesDir().getPath(); 
     }else{ 
      DATABASE_PATH = Environment.getExternalStorageDirectory().getPath(); 
     } 
     return DATABASE_PATH; 
    } 

    public boolean needCreate() { 
     String dbfile = getPath() + "/" + DB_NAME; 
     try { 
      if (!(new File(dbfile).exists())) { 
       return true; 
      } 
      FileUtils.updateFile(dbfile); 
      return false; 

     } catch (Throwable ignored) { 
     } 
     return true; 
    } 

    private SQLiteDatabase openDatabase(String dbfile) { 
     try { 
      if (!(new File(dbfile).exists())) { 
       InputStream is = this.context.getResources().openRawResource(R.raw.zone); 
       FileOutputStream fos = new FileOutputStream(dbfile); 
       int BUFFER_SIZE = 400000; 
       byte[] buffer = new byte[BUFFER_SIZE]; 
       int count = 0; 
       while ((count = is.read(buffer)) > 0) { 
        fos.write(buffer, 0, count); 
       } 
       fos.close(); 
       is.close(); 
      } 
      FileUtils.updateFile(dbfile); 
      return SQLiteDatabase.openOrCreateDatabase(dbfile,null); 

     } catch (FileNotFoundException ignored) { 
     } catch (IOException ignored) { 
     } catch (Throwable ignored) { 
     } 
     return null; 
    } 

    public void closeDatabase() { 
     if(this.database!=null){ 
      this.database.close(); 
     } 
    } 
} 
Смежные вопросы