SQLite 通过.db文件导入已有数据库

来源:互联网 发布:xampp apache配置 编辑:程序博客网 时间:2024/05/06 15:49

见过几次Android数据库操作,貌似都是在程序开始时建一个空数据库,然后进行操作。
那,如果想要用一个已有的数据库怎么办?

因为Android系统下的数据库是存放在/data/data/com..(package name)/目录下,所以我们可以这样:1.将.db文件放到项目源码的res/raw目录下;
2.用FileInputStream读取原数据;
3.用FileOutPutStream把读取到的数据写入那个目录

具体源码如下:

1.把.db文件放到res/raw下

插个题外话,关于SQLite,可以用Navicat这个图形工具建好我们的数据库,即可得到我们的.db数据库文件了。

2.写数据库管理类DBManager.java

01 package com.cssystem.dao;
02
03 import java.io.File;
04 import java.io.FileNotFoundException;
05 import java.io.FileOutputStream;
06 import java.io.IOException;
07 import java.io.InputStream;
08
09 import android.content.ContentValues;
10 import android.content.Context;
11 import android.database.Cursor;
12 import android.database.SQLException;
13 import android.database.sqlite.SQLiteDatabase;
14 import android.os.Environment;
15 import android.util.Log;
16 import android.widget.Toast;
17
18 import com.cssystem.activity.ObjKey;
19 import com.cssystem.activity.R;
20 import com.cssystem.domain.Selected;
21 import com.cssystem.domain.Student;
22 import com.cssystem.domain.User;
23
24 public class DBManager {
25
26 private final int BUFFER_SIZE = 400000;
27 public static final String DB_NAME = “cssystem.db”; //保存的数据库文件名
28 public static final String PACKAGE_NAME = “com.cssystem.activity”;
29 public static final String DB_PATH = “/data”
30 + Environment.getDataDirectory().getAbsolutePath() + “/”
31 + PACKAGE_NAME; //在手机里存放数据库的位置(/data/data/com.cssystem.activity/cssystem.db)
32
33
34 private SQLiteDatabase database;
35 private Context context;
36
37 public DBManager(Context context) {
38 this.context = context;
39 }
40
41 public SQLiteDatabase getDatabase() {
42 return database;
43 }
44
45 public void setDatabase(SQLiteDatabase database) {
46 this.database = database;
47 }
48
49 public void openDatabase() {
50 System.out.println(DB_PATH + “/” + DB_NAME);
51 this.database = this.openDatabase(DB_PATH + “/” + DB_NAME);
52 }
53
54 private SQLiteDatabase openDatabase(String dbfile) {
55
56 try {
57 if (!(new File(dbfile).exists())) {
58 //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
59 InputStream is = this.context.getResources().openRawResource(
60 R.raw.cssystem); //欲导入的数据库
61 FileOutputStream fos = new FileOutputStream(dbfile);
62 byte[] buffer = new byte[BUFFER_SIZE];
63 int count = 0;
64 while ((count = is.read(buffer)) > 0) {
65 fos.write(buffer, 0, count);
66 }
67 fos.close();
68 is.close();
69 }
70
71 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,null);
72 return db;
73
74 } catch (FileNotFoundException e) {
75 Log.e(“Database”, “File not found”);
76 e.printStackTrace();
77 } catch (IOException e) {
78 Log.e(“Database”, “IO exception”);
79 e.printStackTrace();
80 }
81 return null;
82 }
83
84 public void closeDatabase() {
85 this.database.close();
86
87 }
88 }
3.在程序第一个Activity实例化一个DBManager对象,然后对其执行openDatabase()方法就可以完成导入了。

01 package com.cssystem.activity;
02
03
04 import android.app.Activity;
05 import android.app.AlertDialog;
06 import android.content.DialogInterface;
07 import android.content.Intent;
08 import android.net.Uri;
09 import android.os.Bundle;
10 import android.view.Menu;
11 import android.view.MenuItem;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.Button;
15 import android.widget.EditText;
16
17 import com.cssystem.dao.DBManager;
18 import com.cssystem.domain.User;
19 import com.cssystem.service.UserService;
20
21 public class LoginActivity extends Activity {
22
23 public DBManager dbHelper;
24 private User u;
25 private UserService us;
26 private Intent intent;
27
28 @Override
29 public void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31 setContentView(R.layout.activity_login);
32
33 //首次执行导入.db文件
34 dbHelper = new DBManager(this);
35 dbHelper.openDatabase();
36 dbHelper.closeDatabase();
37 ……
38 }
39 }
1)可以把一些数据库的操作写在DBManager类里,然后通过DBManager类的对象调用;

1 DBManager dbHelper = new DBManager(this);
2 dbHelper.openDatabase();
2)可以再完成导入之后,通过一个SQLiteDatabase类的对象打开数据库,并执行操作。

1 SQLiteDatabase database;
2 database = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + “/” + DBManager.DB_NAME, null);

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 留学雅思过了gpa低怎么办澳洲 护士电子化注册用户名忘记了怎么办 护士电子化注册证书编码错误怎么办 澳洲预科上半学期成绩不达标怎么办 美国大学绩点不够怎么办学习证明 研一想换导师导师不答应怎么办 日本留学在留下来不想去了怎么办 加拿大工签3年到期了怎么办 鞋子穿久了会有臭味怎么办 考研忘了自己填写的通讯地址怎么办 基础教育教师培训网注册错了怎么办 11个月宝宝便秘大便有血怎么办 两岁宝宝两天没拉粑粑了怎么办 两岁宝宝两天没拉大便怎么办 两岁宝宝便秘两天没拉怎么办 昨天带孩子上早教课一直哭怎么办 网页账号注册无法获取验证码怎么办 我总是为一些事情而烦恼怎么办 手机键盘打出的字是繁体字怎么办 阴阳师协助任务对方接了不做怎么办 wow牧师选错了圣物怎么办 淘宝有几个订单被管控了怎么办 埋线双眼皮一个宽一个窄怎么办 把维D和维C一起吃了怎么办 微信出现当前登录环境异常该怎么办 去麦加朝觐人要出现死亡怎么办 炉石传说偶数骑削弱后怎么办 出于安全和性能方面的原因怎么办 怀孕后不知道拍过好几次牙片怎么办 百度云种子含有非法离线内容怎么办 苹果手机上的迅雷怎么打不开怎么办 微信绑定银行卡收不到验证码怎么办 支付宝转账为什么没验证码怎么办 电视时间比手机慢三分钟怎么办 13岁现在有月经又流鼻血怎么办 酒店给客人把房间开错了怎么办 手机百度云下载的视频分解了怎么办 知道家人被绑架北派传销怎么办 接手前同事的客人无回复怎么办 喝了酒第二天一直吐怎么办 孩子看的鬼片不敢睡觉害怕怎么办