日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android:Android中用文件初始化sqlite数据库(zz)

發(fā)布時間:2025/3/15 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android:Android中用文件初始化sqlite数据库(zz) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ??很多時候在應(yīng)用安裝初始化時,需要創(chuàng)建本地數(shù)據(jù)庫,同時為數(shù)據(jù)庫添加數(shù)據(jù),之后再從數(shù)據(jù)庫中讀取數(shù)據(jù)。

這里有2個思路

? ??1.先在本地創(chuàng)建一個能支持android使用的sqlite數(shù)據(jù)庫文件,啟動時,用現(xiàn)成的sqlite的二進(jìn)制文件進(jìn)行直接copy到Android系統(tǒng)的數(shù)據(jù)庫路徑

? ??2.可以考慮在第一次啟動時,執(zhí)行數(shù)據(jù)庫初始化的sql文件.

?

1.在本地準(zhǔn)備android能使用的sqlite數(shù)據(jù)庫文件

使用sqlite數(shù)據(jù)庫管理工具,看個人愛好(SQLite Database Browser?,Navicat Premium,)

打開數(shù)據(jù)庫,創(chuàng)建"android_metadata"數(shù)據(jù)表

Sql代碼??
  • CREATE?TABLE?"android_metadata"?("_id"??INTEGER?PRIMARY?KEY?AUTOINCREMENT,"locale"?TEXT?DEFAULT?'en_US');//創(chuàng)建表??
  • INSERT?INTO?"android_metadata"?VALUES?(1,'en_US');//插入值??
  • ?創(chuàng)建其他應(yīng)用需要的表..此處省略.

    ?

    2.復(fù)制文件到應(yīng)用中.

    把第一步創(chuàng)建的數(shù)據(jù)庫文件復(fù)制到應(yīng)用中的assets文件夾, asserts文件夾的路徑如下:

    然后創(chuàng)建DateBaseHelper extends?SQLiteOpenHelper的類文件.

    代碼如下:

    Java代碼??
  • public?class?DataBaseHelper?extends?SQLiteOpenHelper?{??
  • ????//The?Android's?default?system?path?of?your?application?database.??
  • ????private?static?String?DB_PATH?=?"/data/data/YOUR_PACKAGE/databases/";??
  • ????private?static?String?DB_NAME?=?"myDBName";??
  • ????private?SQLiteDatabase?myDataBase;??
  • ????private?final?Context?myContext;??
  • ????/**?
  • ?????*?Constructor?
  • ?????*?Takes?and?keeps?a?reference?of?the?passed?context?in?order?to?access?to?the?application?assets?and?resources.?
  • ?????*?@param?context?
  • ?????*/??
  • ????public?DataBaseHelper(Context?context)?{??
  • ????????super(context,?DB_NAME,?null,?1);??
  • ????????this.myContext?=?context;??
  • ????}??
  • ??
  • ????/**?
  • ?????*?Creates?a?empty?database?on?the?system?and?rewrites?it?with?your?own?database.?
  • ?????*?*/??
  • ????public?void?createDataBase()throws?IOException?{??
  • ????????boolean?dbExist?=?checkDataBase();??
  • ????????if?(dbExist)?{??
  • ????????????//do?nothing?-?database?already?exist??
  • ????????}?else?{??
  • ????????????//By?calling?this?method?and?empty?database?will?be?created?into?the?default?system?path??
  • ????????????//of?your?application?so?we?are?gonna?be?able?to?overwrite?that?database?with?our?database.??
  • ????????????this.getReadableDatabase();??
  • ????????????try?{??
  • ????????????????copyDataBase();??
  • ????????????}?catch?(IOException?e)?{??
  • ????????????????throw?new?Error("Error?copying?database");??
  • ????????????}??
  • ????????}??
  • ????}??
  • ??
  • ????/**?
  • ?????*?Check?if?the?database?already?exist?to?avoid?re-copying?the?file?each?time?you?open?the?application.?
  • ?????*?@return?true?if?it?exists,?false?if?it?doesn't?
  • ?????*/??
  • ????private?boolean?checkDataBase()?{??
  • ????????SQLiteDatabase?checkDB?=?null;??
  • ????????try?{??
  • ????????????String?myPath?=?DB_PATH?+?DB_NAME;??
  • ????????????checkDB?=?SQLiteDatabase.openDatabase(myPath,?null,?SQLiteDatabase.OPEN_READONLY);??
  • ????????}?catch?(SQLiteException?e)?{??
  • ????????????//database?does't?exist?yet.??
  • ????????}??
  • ??
  • ????????if?(checkDB?!=?null)?{??
  • ????????????checkDB.close();??
  • ????????}??
  • ????????return?checkDB?!=?null???true?:?false;??
  • ????}??
  • ??
  • ????/**?
  • ?????*?Copies?your?database?from?your?local?assets-folder?to?the?just?created?empty?database?in?the?
  • ?????*?system?folder,?from?where?it?can?be?accessed?and?handled.?
  • ?????*?This?is?done?by?transfering?bytestream.?
  • ?????*?*/??
  • ????private?void?copyDataBase()throws?IOException?{??
  • ????????//Open?your?local?db?as?the?input?stream??
  • ????????InputStream?myInput?=?myContext.getAssets().open(DB_NAME);??
  • ????????//?Path?to?the?just?created?empty?db??
  • ????????String?outFileName?=?DB_PATH?+?DB_NAME;??
  • ????????//Open?the?empty?db?as?the?output?stream??
  • ????????OutputStream?myOutput?=?new?FileOutputStream(outFileName);??
  • ????????//transfer?bytes?from?the?inputfile?to?the?outputfile??
  • ????????byte[]buffer?=?new?byte[1024];??
  • ????????int?length;??
  • ????????while?((length?=?myInput.read(buffer))?>?0)?{??
  • ????????????myOutput.write(buffer,?0,?length);??
  • ????????}??
  • ??
  • ????????//Close?the?streams??
  • ????????myOutput.flush();??
  • ????????myOutput.close();??
  • ????????myInput.close();??
  • ????}??
  • ??
  • ????public?void?openDataBase()throws?SQLException?{??
  • ????????//Open?the?database??
  • ????????String?myPath?=?DB_PATH?+?DB_NAME;??
  • ????????myDataBase?=?SQLiteDatabase.openDatabase(myPath,?null,?SQLiteDatabase.OPEN_READONLY);??
  • ????}??
  • ??
  • ????@Override??
  • ????public?synchronized?void?close()?{??
  • ????????if?(myDataBase?!=?null)??
  • ????????????myDataBase.close();??
  • ????????super.close();??
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?onCreate(SQLiteDatabase?db)?{}??
  • ??
  • ????@Override??
  • ????public?void?onUpgrade(SQLiteDatabase?db,?int?oldVersion,?int?newVersion)?{}??
  • ????//?Add?your?public?helper?methods?to?access?and?get?content?from?the?database.??
  • ????//?You?could?return?cursors?by?doing?"return?myDataBase.query(....)"?so?it'd?be?easy??
  • ????//?to?you?to?create?adapters?for?your?views.??
  • }??
  • ?

    3.現(xiàn)在我們可以創(chuàng)建DateBaseHelper的實現(xiàn)操作了.

    createDataBase()?//創(chuàng)建

    openDataBase()//打開只讀數(shù)據(jù)庫

    記得要更改"YOUR_PACKAGE"為你的應(yīng)用的包名

    如:com.examplename.myapp

    大概代碼如下:

    Java代碼??
  • ...??
  • DataBaseHelper?myDbHelper?=?new?DataBaseHelper();??
  • myDbHelper?=?new?DataBaseHelper(this);??
  • try?{??
  • ????myDbHelper.createDataBase();??
  • }?catch?(IOException?ioe)?{??
  • ????throw?new?Error("Unable?to?create?database");??
  • }??
  • try?{??
  • ????myDbHelper.openDataBase();??
  • }?catch?(SQLException?sqle)?{??
  • ????throw?sqle;??
  • }??
  • ... ?
    來源:?http://zhangfan822.iteye.com/blog/1883829
  • 轉(zhuǎn)載于:https://www.cnblogs.com/strinkbug/p/6858702.html

    總結(jié)

    以上是生活随笔為你收集整理的android:Android中用文件初始化sqlite数据库(zz)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。