您的位置:首页 > 移动开发 > Android开发

开发android系统时关于sqlite使用时用法

2013-05-04 23:05 375 查看
最近完成一个android大作业,在使用sqlite采用了一些技巧,希望能给有需要的人以帮助. 我们组做的是一个关于手机美食推荐的app,在手机端采用sqlite来储存数据,但是我们在使用的使用候老是遇到一些麻烦,因为sqlite是一个轻量级的数据库,我们在设计数据库的时候,直接用adb直接从里面模拟器的文件系统里拖出来的.也可以直接打开FileExplore,找到对应的目录,然后把数据库文件拖拽出来.设计好了之后,我们还直接在里面添加数据.因为数据量比较大,如果采用在程序中采用sql语句插入,这样十分的不现实.但是我们放回去之后,我再运行程序,居然报错了.后来一看错误,每一次运行都会运行数据库创建的语句,后来我们干脆采用把数据库文件放在asset文件里,在android程序初始化时,直接把数据库复制到它本来应该在的目录下,后来终于没有报错了。





数据库文件放在assets目录下:

然后在代码中执行复制操作:

package com.example.db;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import android.R;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper{

private Context context;
private final String DB_PATH = "/data/data/com.example.lfm/databases/";
private final String DB_NAME = "FOOD.db";

public DBHelper(Context context) {
// TODO Auto-generated constructor stub
this.context = context;

}

public SQLiteDatabase openDatabase() {
SQLiteDatabase database = null;
//检查数据库文件是否存在,如果已经存在那么就什么都不用做
if(!new File(DB_PATH+DB_NAME).exists())
{
File f = new File(DB_PATH);
if (!f.exists())
{
f.mkdir();   //创建数据库储存目录
}
try
{
//复制数据库文件
InputStream is = context.getAssets().open(DB_NAME);
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();
database = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME, null);
}
catch (Exception e){
e.printStackTrace();
}
}
else
{
database = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME, null);
}
return database;
}

}


本文出自 “大工软院的技术生活” 博客,请务必保留此出处http://webcrawler.blog.51cto.com/3663163/1193199
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: