中易网

sqlite怎么创建和打数据库在指定的路径

答案:2  悬赏:30  
解决时间 2021-03-14 17:27
sqlite怎么创建和打数据库在指定的路径
最佳答案
要在Android系统中操作SQLite数据库,是通过Android的核心类SQLiteDatabase类来实现的,通常情况下为了数据库升级的需要以及使用方便,会选择继承SQLiteOpenHelper抽像类,但是SQLiteOpenHelper会将数据库文件创建在一个固定的目录(内存的/data/data/目录中),如果想使用已经存在的数据库文件也就是说数据库会和程序一起发布,就得通过使用SQLiteDabase的静态方法OpenOrCreateDatabase()方法来得到SQLiteDabase对象,下面是一个具体操作类:
package net.my.dao;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import net.my.jokebook.R;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
public class DBHelper {
//得到SD卡路径
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/joke";
private final Activity activity;
//数据库名
private final String DATABASE_FILENAME;
public DBHelper(Context context) {
// TODO Auto-generated constructor stub
//这里直接给数据库名
DATABASE_FILENAME = "jokebook.db3";
activity = (Activity)context;
}
//得到操作数据库的对象
public SQLiteDatabase openDatabase()
{
try
{
boolean b = false;
//得到数据库的完整路径名
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
//将数据库文件从资源文件放到合适地方(资源文件也就是数据库文件放在项目的res下的raw目录中)
//将数据库文件复制到SD卡中 File dir = new File(DATABASE_PATH);
if (!dir.exists())
b = dir.mkdir();
//判断是否存在该文件
if (!(new File(databaseFilename)).exists())
{
//不存在得到数据库输入流对象
InputStream is = activity.getResources().openRawResource(
R.raw.jokebook);
//创建输出流
FileOutputStream fos = new FileOutputStream(databaseFilename);
//将数据输出
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
//关闭资源
fos.close();
is.close();
}
//得到SQLDatabase对象
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
return database;
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
return null;
}
}
写完这个类之后,就能得到SQLiteDatabase对象,就能对数据库操作了。
全部回答
1讲db文件放入你的raw文件夹或者assets文件夹2复制你的db到你的data/data/com.**.***/databases文件夹中3正常的读取了(和自己代码创建的方式一样调用)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三星s8怎么双开应用
情易散,糖不甩.缘已变,糖不甩 什么意思,不懂
三河农家菜地址有知道的么?有点事想过去
ouki/欧奇 sgmsgms v6 怎么样
请问金普商品是啥?做什么的呀?
试用所学物理知识简述怎样判别某一圆形直管内
牛轭岭水行在哪里啊,我有事要去这个地方
核子世界无法触发,怎么办
我儿子从甘肃酒泉,一年级转学到湖北鄂州,学
用十、一、X、÷法得出结里24
电控自动变速器升挡不提速的故障分析的论文怎
石家庄君乐宝乳业有限公司招聘的电商客服专员
亡去不义,不可不语什么意思
前盐海怎么去啊,有知道地址的么
现在昆山四海电子还招人吗?
推荐资讯
至大陶瓷这个地址在什么地方,我要处理点事
《庄子与惠子游于濠梁》表达了庄子怎样的思想
考了驾驶证科目一也练了七八次车请问还能退款
macbook pages 表格问题 在线等
位于湘潭的五岳之一的是什么山?
优步司机注册电子邮箱
重庆大学为什么被人黑成985末流
质量为0.5千克的
京东小白卡是什么卡?
红运园地址在什么地方,想过去办事
两条直线可以确定一个平面吗
我已经结了婚的,但老公对我不怎样,可现在有
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?