本文介绍了复制SQLite数据库从资产的文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想复制的资产文件夹SQLite数据库。这是我DatabaseAdapter.java类
I wanna copy SQLite database from assets folder. This my DatabaseAdapter.java class
package com.example.dictionary; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseAdapter extends SQLiteOpenHelper { static String DB_PATH = "/data/data/com.example.dictionary/databases/"; static String DB_NAME = "dict.db"; SQLiteDatabase db; private final Context mContext; public DatabaseAdapter(Context context) { super(context, DB_NAME, null, 1); this.mContext = context; } public void createDB(){ boolean dbExist = checkDB(); if (dbExist) { } else { this.getReadableDatabase(); try { copyDB(); } catch (Exception e) { throw new Error("Error copying DB"); } } } private void copyDB() throws IOException { InputStream dbInput = mContext.getAssets().open(DB_NAME); String outFile = DB_PATH + DB_NAME; OutputStream dbOutput = new FileOutputStream(outFile); byte[] buffer = new byte[1024]; int length; while ((length = dbInput.read(buffer))>0) { dbOutput.write(buffer,0,length); } dbOutput.flush(); dbOutput.close(); dbInput.close(); } private boolean checkDB() { SQLiteDatabase check = null; try { String dbPath = DB_PATH+DB_NAME; check = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY); } catch (Exception e) { // TODO: handle exception } if (check!=null) { check.close(); } return check != null ? true : false; } public void openDB(){ String dbPath = DB_PATH+DB_NAME; db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY); } public synchronized void close(){ if(db != null) db.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }当我运行应用程序,它不是错误。但是当我检查数据库文件夹中,我看到文件dict.db,但只有12.00K并且只有android_metadata表。请帮我。谢谢。
When i run app it isn't error. but when i check databases folder i saw file "dict.db" but only 12.00K and has only android_metadata table. Please help me. thanks.
推荐答案把所有这些方法在乌拉圭回合的辅助类。
put all this method in ur helper class.
public DataBaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub mContext = context; } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } /** * This method will create database in application package /databases * directory when first time application launched **/ public void createDataBase() throws IOException { boolean mDataBaseExist = checkDataBase(); if (!mDataBaseExist) { this.getReadableDatabase(); try { copyDataBase(); } catch (IOException mIOException) { mIOException.printStackTrace(); throw new Error("Error copying database"); } finally { this.close(); } } } /** This method checks whether database is exists or not **/ private boolean checkDataBase() { try { final String mPath = DATABASE_PATH + DATABASE_NAME; final File file = new File(mPath); if (file.exists()) return true; else return false; } catch (SQLiteException e) { e.printStackTrace(); return false; } } /** * This method will copy database from /assets directory to application * package /databases directory **/ private void copyDataBase() throws IOException { try { InputStream mInputStream = mContext.getAssets().open(DATABASE_NAME); String outFileName = DATABASE_PATH + DATABASE_NAME; OutputStream mOutputStream = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = mInputStream.read(buffer)) > 0) { mOutputStream.write(buffer, 0, length); } mOutputStream.flush(); mOutputStream.close(); mInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } /** This method open database for operations **/ public boolean openDataBase() throws SQLException { String mPath = DATABASE_PATH + DATABASE_NAME; myDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.OPEN_READWRITE); return myDataBase.isOpen(); } /** This method close database connection and released occupied memory **/ @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); SQLiteDatabase.releaseMemory(); super.close(); }更多推荐
复制SQLite数据库从资产的文件夹
发布评论