AssetDatabaseOpenHelper 数据库工具类

来源:互联网 发布:2017年新出的网络剧 编辑:程序博客网 时间:2024/04/30 12:44
package cn.trinea.android.common.util;import java.io.File;import java.io.IOException;import java.io.InputStream;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteException;/** * AssetDatabaseOpenHelper * <ul> * <li>Auto copy databse form assets to /data/data/package_name/databases</li> * <li>You can use it like {@link SQLiteDatabase}, use {@link #getWritableDatabase()} to create and/or open a database * that will be used for reading and writing. use {@link #getReadableDatabase()} to create and/or open a database that * will be used for reading only.</li> * </ul> *  * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-12-5 */public class AssetDatabaseOpenHelper {    private Context context;    private String  databaseName;    public AssetDatabaseOpenHelper(Context context, String databaseName) {        this.context = context;        this.databaseName = databaseName;    }    /**     * Create and/or open a database that will be used for reading and writing.     *      * @return     * @throws RuntimeException if cannot copy database from assets     * @throws SQLiteException if the database cannot be opened     */    public synchronized SQLiteDatabase getWritableDatabase() {        File dbFile = context.getDatabasePath(databaseName);        if (dbFile != null && !dbFile.exists()) {            try {                copyDatabase(dbFile);            } catch (IOException e) {                throw new RuntimeException("Error creating source database", e);            }        }        return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READWRITE);    }    /**     * Create and/or open a database that will be used for reading only.     *      * @return     * @throws RuntimeException if cannot copy database from assets     * @throws SQLiteException if the database cannot be opened     */    public synchronized SQLiteDatabase getReadableDatabase() {        File dbFile = context.getDatabasePath(databaseName);        if (dbFile != null && !dbFile.exists()) {            try {                copyDatabase(dbFile);            } catch (IOException e) {                throw new RuntimeException("Error creating source database", e);            }        }        return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);    }    /**     * @return the database name     */    public String getDatabaseName() {        return databaseName;    }    private void copyDatabase(File dbFile) throws IOException {        InputStream stream = context.getAssets().open(databaseName);        FileUtils.writeFile(dbFile, stream);        stream.close();    }}
0 0
原创粉丝点击