您的位置:首页 > 数据库

AssetDatabaseOpenHelper 数据库工具类

2015-10-12 16:15 106 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: