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(); } }
相关文章推荐
- sqlserver 查询生成XML格式数据
- oracle数据库中nvl使用
- Oracle调用Java类
- MongoDB
- mysql 远程访问
- 总结的一些MySQL索引相关的知识点
- 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置
- Oracle查询表里的重复数据方法:
- MySQL 入门教程
- MySQL 入门教程
- MySQL 入门教程
- MySQL- SHOW TABLE STATUS命令
- mysql show table status 的替代方案:获得更多更具体的表信息
- 常用MySQL操作
- Hive表导出到mysql表异常
- 讨论SQLite数据库损坏与修复
- Redis
- MySql常用操作命令总结
- oracle错误:cmd导入时报错-12541
- mysql规范