亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android操作存放在assets文件夾下SQLite數據庫的方法

2020-04-11 11:29:22
字體:
來源:轉載
供稿:網友

本文實例講述了Android操作存放在assets文件夾下SQLite數據庫的方法。分享給大家供大家參考。具體如下:

因為這次的項目需要自帶數據,所以就就把數據都放到一個SQLite的數據庫文件中了,之后把該文件放到了assets文件夾下面。一開始打算每次都從assets文件夾下面把該文件夾拷貝到手機的SD卡或者手機自身的存儲上之后再使用,后來考慮到每次都拷貝的話效率不高,并且如果涉及到對數據庫的修改操作的話拷貝之后數據就被恢復了。

因此就寫了該封裝,該封裝只是在第一次使用數據庫文件的時候把該文件夾拷貝到手機的/data/data/應用程序報名/database文件夾下,之后就直接從這個地方使用了。并且它允許你直接通過assets文件夾下的數據庫名稱來獲取SQLiteDatabase對象,這樣就極大的方便了你對數據庫的使用。

封裝如下:

package com.sin.android.database; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.content.SharedPreferences; import android.content.res.AssetManager; import android.database.sqlite.SQLiteDatabase; import android.util.Log; /**  * 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 RobinTang  * @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();     }   } } 

使用的過程也很簡單,應用程序開始的時候初始化一下,之后就可以在任意地方獲取管理器在通過assets文件夾下的數據庫文件名直接獲取SQLiteDatabase對象,之后對數據庫的操作就完全看你了。。。
簡單的使用例子:

// 初始化,只需要調用一次 AssetsDatabaseManager.initManager(getApplication()); // 獲取管理對象,因為數據庫需要通過管理對象才能夠獲取 AssetsDatabaseManager mg = AssetsDatabaseManager.getManager(); // 通過管理對象獲取數據庫 SQLiteDatabase db1 = mg.getDatabase("db1.db"); // 對數據庫進行操作 db1.execSQL("insert into tb([ID],[content]) values(null, 'db1');"); 

需要注意的是獲取數據庫對象的時候是區分數據庫文件名的大小寫的。

希望本文所述對大家的Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情精品久久久久久久变态| 91精品国产91久久久久| 91产国在线观看动作片喷水| 91超碰中文字幕久久精品| 亚洲午夜未满十八勿入免费观看全集| 欧美激情亚洲综合一区| 97在线观看免费| 国产999精品视频| 亚洲iv一区二区三区| 日韩中文字幕免费视频| 亚洲天堂男人的天堂| 国产精品永久免费| 欧美大片免费看| 亚洲一区美女视频在线观看免费| 色妞一区二区三区| 国产aaa精品| 亚洲天堂第一页| 亚洲国产精品专区久久| 69av在线视频| 久久精品99无色码中文字幕| 亚洲精品www| 国产精品三级久久久久久电影| 麻豆一区二区在线观看| 日本伊人精品一区二区三区介绍| 亚洲xxxxx电影| 97超级碰碰碰久久久| 亚洲第一天堂av| 久久久精品影院| 亚洲精品福利在线| 日韩欧美福利视频| 日韩美女视频在线观看| 亚洲欧美日韩精品久久奇米色影视| 欧美国产精品va在线观看| 日韩成人在线免费观看| 黄色一区二区在线| 久久久www成人免费精品张筱雨| 欧美高清视频一区二区| 色综合天天综合网国产成人网| 久久视频这里只有精品| 91老司机在线| 日韩免费在线电影| 久久在线免费观看视频| 久久久久久伊人| 欧美日韩中国免费专区在线看| 亚洲欧洲一区二区三区久久| 少妇av一区二区三区| 亚洲精品日韩丝袜精品| 欧美日韩成人在线播放| 日韩欧美国产一区二区| 中文字幕精品www乱入免费视频| 日韩av高清不卡| 国产精品高潮视频| 久久这里只有精品视频首页| 精品亚洲一区二区三区在线观看| 国产精品影院在线观看| 青青在线视频一区二区三区| 久久亚洲精品网站| 美女久久久久久久久久久| 亚洲欧美三级伦理| 最近2019中文免费高清视频观看www99| 欧美极品美女电影一区| 亚洲国产精品99| 91理论片午午论夜理片久久| 欧美日韩亚洲网| 97精品在线视频| 国产日韩欧美自拍| 久久久99久久精品女同性| 欧美精品videosex性欧美| 欧美日韩国产限制| 亚洲欧美日韩直播| 国产精品极品美女在线观看免费| 91免费看国产| 国产精品久久久久久久久久新婚| 97国产一区二区精品久久呦| 久热国产精品视频| 国产国语videosex另类| 中文字幕亚洲国产| 国产精品视频精品视频| 91国内揄拍国内精品对白| 久久精品视频播放| 欧美激情综合色| 国产精品视频99| 成人美女av在线直播| 亚洲2020天天堂在线观看| 久久精品欧美视频| 欧美乱人伦中文字幕在线| 久久久久成人精品| 久久激情五月丁香伊人| 亚洲国产日韩欧美在线99| 成人精品视频在线| 一本大道香蕉久在线播放29| 少妇激情综合网| 欧美精品情趣视频| 久久久久亚洲精品成人网小说| 精品日韩视频在线观看| 亚洲女同性videos| 欧美激情亚洲精品| 中文字幕日韩高清| 亚洲激情久久久| 亚洲国产精品国自产拍av秋霞| 欧美国产日韩中文字幕在线| 亚洲欧美在线播放| 97超碰蝌蚪网人人做人人爽| 中文字幕久久久av一区| 国产精品视频一区二区高潮| 久久久久久久国产精品视频| 国产精品福利久久久| 日本成人免费在线| 欧美日本精品在线| 日韩美女在线观看一区| 深夜福利91大全| 最近2019免费中文字幕视频三| 国产欧美欧洲在线观看| 亚洲美女精品成人在线视频| 综合网中文字幕| 日韩黄在线观看| 精品国模在线视频| 精品久久久久久中文字幕大豆网| 国产精品久久久久久久久久| 亚洲日本欧美日韩高观看| 91精品国产沙发| 日韩精品中文字幕在线| 日韩va亚洲va欧洲va国产| www.美女亚洲精品| 亚洲成人999| 久久久免费高清电视剧观看| 欧美成人免费视频| 九九视频这里只有精品| 欧美成人黑人xx视频免费观看| 欧美丝袜一区二区| 日韩理论片久久| 免费av一区二区| 国产精品av网站| 亚洲国产天堂久久综合| 午夜精品99久久免费| 国产在线精品播放| 亚洲无线码在线一区观看| 最近2019免费中文字幕视频三| 日本久久久久久久| 久久视频免费观看| 久久手机精品视频| 久久久欧美一区二区| 91国在线精品国内播放| 91wwwcom在线观看| 69视频在线播放| 亚洲另类xxxx| 国产亚洲视频中文字幕视频| 欧美激情乱人伦| 奇门遁甲1982国语版免费观看高清| 亚洲精品www久久久久久广东| 日韩电影视频免费| 国产丝袜一区二区三区免费视频| 狠狠色狠色综合曰曰| 色999日韩欧美国产| 欧美性理论片在线观看片免费| 久久精品国产69国产精品亚洲| 欧美激情亚洲综合一区| 亚洲久久久久久久久久久| 日韩国产一区三区| 日韩中文字幕亚洲| 亚洲人成在线一二| 亚洲女同性videos| 欧美国产日韩在线| 欧美午夜www高清视频|