先简单说下步骤:
1.将格式为.db的数据库文件放到android项目assets目录中;
2.在程序必要的时候,将其“拷贝”(文件读取)到Android 程序默认的数据库存储目录中,一般路径为“/data/data/项目包名/databases/“;
3.自定义SQLiteOpenHelper类,创建一个名字跟步骤1中.db名称一样的数据库;
4.按照平常逻辑,增删改查数据库。
步骤1:如下图,将数据库文件copy到assets目录中
![](https://img.haomeiwen.com/i2516867/396903a073cb594b.png)
步骤2:将db文件读取拷贝到databases目录中,代码如下:
package com.kinth.youdian.activity.boti.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import android.annotation.SuppressLint;
import android.content.Context;
/**
* 将assets中的db文件拷贝到databases中
* @author Botision.Huang
* @Date: 2015-8-18 下午4:11:24
* @Descp: TODO
*/
public class DatabaseUtil {
@SuppressLint("SdCardPath")
public static void packDataBase(Context context){
// com.kinth.youdian 是程序的包名,请根据自己的程序调整
// /data/data/com.kinth.youdian/databases目录是准备放 SQLite 数据库的地方,也是 Android 程序默认的数据库存储目录
// 数据库名为 db_youdian.db
String DB_PATH = "/data/data/com.kinth.youdian/databases/";
String DB_NAME = "db_youdian.db";
// 检查 SQLite 数据库文件是否存在
if (!(new File(DB_PATH + DB_NAME)).exists()) {
// 如 SQLite 数据库文件不存在,再检查一下 database 目录是否存在
File f = new File(DB_PATH);
// 如 database 目录不存在,新建该目录
if (!f.exists()) {
f.mkdir();
}
try {
// 得到 assets 目录下我们实现准备好的 SQLite 数据库作为输入流
InputStream is = context.getAssets().open(DB_NAME);
// 输出流,在指定路径下生成db文件
OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
// 文件写入
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
// 关闭文件流
os.flush();
os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
步骤3:代码如下
package com.kinth.youdian.activity.boti.dbdao;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 【省市区】数据库帮助类
* @author Botision.Huang
* @Date: 2015-8-18 下午4:21:33
* @Descp: TODO
*/
public class ProvinceDataHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "db_youdian.db";
private static final int DATABASE_VERSION = 1;
/** Create a helper object for the Events database */
public ProvinceDataHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
步骤4:做完以上3个步骤之后,下面我们就可以按照正常逻辑,去操作数据库啦,譬如下代码:
package com.kinth.youdian.activity.boti.dbdao;
import java.util.ArrayList;
import java.util.List;
import com.kinth.youdian.activity.boti.dbdao.bean.ProvinceBean;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class ProvinceDao {
private ProvinceDataHelper helper;
private SQLiteDatabase db = null;
public ProvinceDao(Context mContext){
helper = new ProvinceDataHelper(mContext);
}
/**
* 从本地数据库获取省份列表
* @return
*/
public List<ProvinceBean> getProvinceList(){
List<ProvinceBean> proList = new ArrayList<ProvinceBean>();
try{
db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from province", null);
if(null != cursor){
while(cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
ProvinceBean bean = new ProvinceBean();
bean.setId(id);
bean.setName(name);
proList.add(bean);
}
}
cursor.close();
}catch(Exception e){
e.printStackTrace();
}finally{
if(null != db){
db.close();
}
}
return proList;
}
}
网友评论