Android中对assets目录下数据库操作
来源:互联网 发布:手机淘宝积分怎么查询 编辑:程序博客网 时间:2024/06/03 07:34
1.先写一个对本地数据的管理类AssetsDatabaseManager
/** * This is a Assets Database Manager * Use it, you can use a assets database file in you application * It will copy the database file to "/data/data/[your application package name]/database" when you first time you use it * Then you can get a SQLiteDatabase object by the assets database file * @author smartTop * @time 2012-09-20 * * * How to use: * 1. Initialize AssetsDatabaseManager * 2. Get AssetsDatabaseManager * 3. Get a SQLiteDatabase object through database file * 4. Use this database object * * Using example: * AssetsDatabaseManager.initManager(getApplication()); // this method is only need call one time * AssetsDatabaseManager mg = AssetsDatabaseManager.getManager(); // get a AssetsDatabaseManager object * SQLiteDatabase db1 = mg.getDatabase("db1.db"); // get SQLiteDatabase object, db1.db is a file in assets folder * db1.??? // every operate by you want * Of cause, you can use AssetsDatabaseManager.getManager().getDatabase("xx") to get a database when you need use a database */public class AssetsDatabaseManager { private static String tag = "AssetsDatabase"; // for LogCat private static String databasepath = "/data/data/%s/database"; // %s is packageName // A mapping from assets database file to SQLiteDatabase object private Map<String, SQLiteDatabase> databases = new HashMap<String, SQLiteDatabase>(); // Context of application private Context context = null; // Singleton Pattern private static AssetsDatabaseManager mInstance = null; /** * Initialize AssetsDatabaseManager * @param context, context of application */ public static void initManager(Context context){ if(mInstance == null){ mInstance = new AssetsDatabaseManager(context); } } /** * Get a AssetsDatabaseManager object * @return, if success return a AssetsDatabaseManager object, else return null */ public static AssetsDatabaseManager getManager(){ return mInstance; } private AssetsDatabaseManager(Context context){ this.context = context; } /** * Get a assets database, if this database is opened this method is only return a copy of the opened database * @param dbfile, the assets file which will be opened for a database * @return, if success it return a SQLiteDatabase object else return null */ public SQLiteDatabase getDatabase(String dbfile) { if(databases.get(dbfile) != null){ Log.i(tag, String.format("Return a database copy of %s", dbfile)); return (SQLiteDatabase) databases.get(dbfile); } if(context==null) return null; Log.i(tag, String.format("Create database %s", dbfile)); String spath = getDatabaseFilepath(); String sfile = getDatabaseFile(dbfile); File file = new File(sfile); SharedPreferences dbs = context.getSharedPreferences(AssetsDatabaseManager.class.toString(), 0); boolean flag = dbs.getBoolean(dbfile, false); // Get Database file flag, if true means this database file was copied and valid if(!flag || !file.exists()){ file = new File(spath); if(!file.exists() && !file.mkdirs()){ Log.i(tag, "Create \""+spath+"\" fail!"); return null; } if(!copyAssetsToFilesystem(dbfile, sfile)){ Log.i(tag, String.format("Copy %s to %s fail!", dbfile, sfile)); return null; } dbs.edit().putBoolean(dbfile, true).commit(); } SQLiteDatabase db = SQLiteDatabase.openDatabase(sfile, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); if(db != null){ databases.put(dbfile, db); } return db; } private String getDatabaseFilepath(){ return String.format(databasepath, context.getApplicationInfo().packageName); } private String getDatabaseFile(String dbfile){ return getDatabaseFilepath()+"/"+dbfile; } private boolean copyAssetsToFilesystem(String assetsSrc, String des){ Log.i(tag, "Copy "+assetsSrc+" to "+des); InputStream istream = null; OutputStream ostream = null; try{ AssetManager am = context.getAssets(); istream = am.open(assetsSrc); ostream = new FileOutputStream(des); byte[] buffer = new byte[1024]; int length; while ((length = istream.read(buffer))>0){ ostream.write(buffer, 0, length); } istream.close(); ostream.close(); } catch(Exception e){ e.printStackTrace(); try{ if(istream!=null) istream.close(); if(ostream!=null) ostream.close(); } catch(Exception ee){ ee.printStackTrace(); } return false; } return true; } /** * Close assets database * @param dbfile, the assets file which will be closed soon * @return, the status of this operating */ public boolean closeDatabase(String dbfile){ if(databases.get(dbfile) != null){ SQLiteDatabase db = (SQLiteDatabase) databases.get(dbfile); db.close(); databases.remove(dbfile); return true; } return false; } /** * Close all assets database */ static public void closeAllDatabase(){ Log.i(tag, "closeAllDatabase"); if(mInstance != null){ for(int i=0; i<mInstance.databases.size(); ++i){ if(mInstance.databases.get(i)!=null){ mInstance.databases.get(i).close(); } } mInstance.databases.clear(); } }}2.初始化数据库
// 初始化,只需要调用一次AssetsDatabaseManager.initManager(getApplicationContext());// 获取管理对象,因为数据库需要通过管理对象才能够获取AssetsDatabaseManager mg = AssetsDatabaseManager.getManager();// 通过管理对象获取数据库addressDB = mg.getDatabase("address.db");注意:初始化话,只能初始化一次,最好在application中初始化
0 0
- Android中对assets目录下数据库操作
- android开发:SD卡,Assets目录,data/data目录下,数据库的复制操作
- android中assets下隐藏的images目录
- Android 中 Assets目录下 文件或文件夹的复制
- Android中读取assets目录下的文件详细介绍
- Android中读取assets目录下的文件详细介绍
- 读取Assets目录下的数据库
- [Android] Android assets目录下资源使用
- android应用Assets目录下的资源
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android 读取assets目录下的文件
- Android读取assets目录下的资源
- Android Studio下添加assets目录
- Android 读取 assets目录下的文件
- Android读取assets目录下的资源
- Android读取assets目录下的资源
- Android获取Assets目录下文本文件
- 批量数据转移
- 泛型与非泛型
- CentOS压缩与打包
- python 简约策略
- linux socket server
- Android中对assets目录下数据库操作
- MATLAB 制作课执行文件遇到问题 “Test checkout of feature 'Compiler' failed”
- 正则表达式-各种数字验证
- 将matlab中的函数编译成C++ 并打包在其他电脑上运行
- Toradex 为基于NXP i.MX7的计算机模块提供Windows Embedded Compact 操作系统支持
- Spring 如何读取properties文件内容
- 解决Hibernate:could not initialize proxy - no Session(申明:来源于网络)
- mybatis date类型引发问题
- [生存志] 第66节 子贡使五国