2014-10-18 2 views
0

Все учебники, которые я видел об использовании SQLite db в Android, создают сами базу данных. Это похоже на то, что это требование. Невозможно создать db с помощью SQLite workbench и установить его в папки приложений Android в правильном месте?Создание или установка базы данных SQLite в приложении для Android

ответ

2

IT возможно.

Просто создайте базу данных SQLite и поместите ее в свою папку с ресурсами.

Когда приложение запускается, просто проверьте, существует или нет db, и создайте его, если его не существует.

public String DB_PATH = null; 
    public final static String DB_NAME = "mye.db"; //take note this is in your asset folder 
    private static final int DB_VERSION = 1; 
    private SQLiteDatabase myDatabase; 
    private Context myContext = null; 

     public DBAdapter(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
     this.myContext = context; 
     DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; 
    } 

     /** 
    * Creates a empty database on the system and rewrites it with your own 
    * database. 
    * */ 
    public void createDataBase() throws IOException { 

     this.getReadableDatabase(); 

     try { 
      copyDatabase(); 
     } catch (IOException e) { 

      throw new Error("Error copying database"); 

     } 
    } 

    /** 
    * Copy DB from ASSETS 
    */ 

    public void copyDatabase() throws IOException { 

     // Open your local db as the input stream 
     InputStream myInput = myContext.getAssets().open(DB_NAME); 

     // Path to the just created empty db 
     String outFileName = DB_PATH + DB_NAME; 

     // Open the empty db as the output stream 
     OutputStream myOutput = new FileOutputStream(outFileName); 

     // transfer bytes from the inputfile to the outputfile 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = myInput.read(buffer)) > 0) { 
      myOutput.write(buffer, 0, length); 
     } 

     // Close the streams 
     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } 

    /** 
    * Opens Database . Method is synhcronized 
    * @throws SQLException 
    */ 
    public synchronized void openDatabase() throws SQLException { 
     String dbPath = DB_PATH + DB_NAME; 
     myDatabase = SQLiteDatabase.openDatabase(dbPath, null, 
       SQLiteDatabase.OPEN_READWRITE); 
    } 

    /** 
    * Closes database. 
    * Method is synchronized for protection 
    */ 
    @Override 
    public synchronized void close() { 
     if (myDatabase != null) { 
      myDatabase.close(); 
     } 
     super.close(); 
    } 


    /** 
    * Check if the database exists 
    * 
    * @param cntx 
    * @return true/false 
    */ 
    public boolean checkDatabase(Context cntx) { 
     File dbFile = cntx.getDatabasePath(DB_NAME); 
//  Log.e("zeus", "Check db returns : " + dbFile.exists()); 
     return dbFile.exists(); 

    } 

В вашей основной деятельности или класс, расширяющий приложение просто получить экземпляр вашей DBAdapter и проверить, если БД существует.

mDBAdapter = new DBAdapter(getApplicationContext()); 
if (!mDBAdapter.checkDatabase(getApplicationContext())) { 
    try { 
     mDBAdapter.createDataBase(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

И как разместить его в папке с активами? Когда я подключу телефон к своему компьютеру, я не могу найти такую ​​папку? – ProfK

+0

Я не уверен, что вы поняли, что я написал. В вашей структуре папок приложения у вас есть src/libs/res и т. Д. Также должна быть папка с именем «assets», если ее нет, создайте ее и поместите там свою базу данных. –

0

Невозможно создать db с помощью инструментария SQLite и установить его в папках приложений Android в правильном месте?

Добро пожаловать, пожалуйста, using SQLiteAssetHelper как средство упаковки и развертывания базы данных.

Обычно это делается только в том случае, если у вас есть важные данные, которые вы хотите упаковать вместе с приложением.

Смежные вопросы