生活随笔
收集整理的這篇文章主要介紹了
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的二進制文件進行直接copy到Android系統(tǒng)的數(shù)據(jù)庫路徑
? ??2.可以考慮在第一次啟動時,執(zhí)行數(shù)據(jù)庫初始化的sql文件.
?
1.在本地準備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?{????????????private?static?String?DB_PATH?=?"/data/data/YOUR_PACKAGE/databases/";??????private?static?String?DB_NAME?=?"myDBName";??????private?SQLiteDatabase?myDataBase;??????private?final?Context?myContext;????????????????public?DataBaseHelper(Context?context)?{??????????super(context,?DB_NAME,?null,?1);??????????this.myContext?=?context;??????}????????????????public?void?createDataBase()throws?IOException?{??????????boolean?dbExist?=?checkDataBase();??????????if?(dbExist)?{????????????????????????}?else?{??????????????????????????????????????????this.getReadableDatabase();??????????????try?{??????????????????copyDataBase();??????????????}?catch?(IOException?e)?{??????????????????throw?new?Error("Error?copying?database");??????????????}??????????}??????}?????????????????private?boolean?checkDataBase()?{??????????SQLiteDatabase?checkDB?=?null;??????????try?{??????????????String?myPath?=?DB_PATH?+?DB_NAME;??????????????checkDB?=?SQLiteDatabase.openDatabase(myPath,?null,?SQLiteDatabase.OPEN_READONLY);??????????}?catch?(SQLiteException?e)?{????????????????????????}????????????if?(checkDB?!=?null)?{??????????????checkDB.close();??????????}??????????return?checkDB?!=?null???true?:?false;??????}??????????????????private?void?copyDataBase()throws?IOException?{????????????????????InputStream?myInput?=?myContext.getAssets().open(DB_NAME);????????????????????String?outFileName?=?DB_PATH?+?DB_NAME;????????????????????OutputStream?myOutput?=?new?FileOutputStream(outFileName);????????????????????byte[]buffer?=?new?byte[1024];??????????int?length;??????????while?((length?=?myInput.read(buffer))?>?0)?{??????????????myOutput.write(buffer,?0,?length);??????????}??????????????????????myOutput.flush();??????????myOutput.close();??????????myInput.close();??????}????????public?void?openDataBase()throws?SQLException?{????????????????????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)?{}????????????????????}???
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)容還不錯,歡迎將生活随笔推薦給好友。