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

SQLite 通过.db文件导入已有数据,第1张

概述见过几次Android数据库 *** 作,貌似都是在程序开始时建一个空数据库,然后进行 *** 作。 那,如果想要用一个已有的数据库怎么办? 因为Android系统下的数据库是存放在/data/data/com.*.*(package name)/目录下,所以我们可以这样:1.将.db文件放到项目源码的res/raw目录下; 2.用FileInputStream读取原数据; 3.用FileOutPutStream 见过几次AndroID数据库 *** 作,貌似都是在程序开始时建一个空数据库,然后进行 *** 作。 @H_419_2@ 那,如果想要用一个已有的数据库怎么办? @H_419_2@ @H_419_2@因为AndroID系统下的数据库是存放在/data/data/com.*.*(package name)/目录下,所以我们可以这样:1.将.db文件放到项目源码的res/raw目录下; @H_419_2@2.用fileinputStream读取原数据; @H_419_2@3.用fileOutPutStream把读取到的数据写入那个目录 @H_419_2@具体源码如下: @H_419_2@

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


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

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

package com.CSSystem.dao;import java.io.file;import java.io.fileNotFoundException;import java.io.fileOutputStream;import java.io.IOException;import java.io.inputStream;import androID.content.ContentValues;import androID.content.Context;import androID.database.Cursor;import androID.database.sqlException;import androID.database.sqlite.sqliteDatabase;import androID.os.Environment;import androID.util.Log;import androID.Widget.Toast;import com.CSSystem.activity.ObjKey;import com.CSSystem.activity.R;import com.CSSystem.domain.Selected;import com.CSSystem.domain.Student;import com.CSSystem.domain.User;public class DBManager {	private final int BUFFER_SIZE = 400000;    public static final String DB_name = "CSSystem.db"; //保存的数据库文件名public static final String PACKAGE_name = "com.CSSystem.activity";    public static final String DB_PATH = "/data"            + Environment.getDataDirectory().getabsolutePath() + "/"            + PACKAGE_name;  //在手机里存放数据库的位置(/data/data/com.CSSystem.activity/CSSystem.db)            private sqliteDatabase database;    private Context context;    public DBManager(Context context) {        this.context = context;    }    public sqliteDatabase getDatabase() {return database;}public voID setDatabase(sqliteDatabase database) {this.database = database;}public voID openDatabase() {    	System.out.println(DB_PATH + "/" + DB_name);        this.database = this.openDatabase(DB_PATH + "/" + DB_name);    }    private sqliteDatabase openDatabase(String dbfile) {        try {            if (!(new file(dbfile).exists())) {            	//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库                inputStream is = this.context.getResources().openRawResource(                        R.raw.CSSystem); //欲导入的数据库                fileOutputStream fos = new fileOutputStream(dbfile);                byte[] buffer = new byte[BUFFER_SIZE];                int count = 0;                while ((count = is.read(buffer)) > 0) {                    fos.write(buffer,count);                }                fos.close();                is.close();            }            sqliteDatabase db = sqliteDatabase.openorCreateDatabase(dbfile,null);            return db;        } catch (fileNotFoundException e) {            Log.e("Database","file not found");            e.printstacktrace();        } catch (IOException e) {            Log.e("Database","IO exception");            e.printstacktrace();        }        return null;    }        public voID closeDatabase() {        this.database.close();    }}

3.在程序第一个Activity实例化一个DBManager对象,然后对其执行openDatabase()方法就可以完成导入了。

package com.CSSystem.activity;import androID.app.Activity;import androID.app.AlertDialog;import androID.content.DialogInterface;import androID.content.Intent;import androID.net.Uri;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.EditText;import com.CSSystem.dao.DBManager;import com.CSSystem.domain.User;import com.CSSystem.service.UserService;public class LoginActivity extends Activity {	public DBManager dbHelper;	private User u;	private UserService us;	private Intent intent;	    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_login);                //首次执行导入.db文件dbHelper = new DBManager(this);        dbHelper.openDatabase();        dbHelper.closeDatabase();……}}

1)可以把一些数据库的 *** 作写在DBManager类里,然后通过DBManager类的对象调用;

DBManager dbHelper = new DBManager(this);dbHelper.openDatabase();

2)可以再完成导入之后,通过一个sqliteDatabase类的对象打开数据库,并执行 *** 作。

sqliteDatabase database;database = sqliteDatabase.openorCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_name,null);
总结

以上是内存溢出为你收集整理的SQLite 通过.db文件导入已有数据全部内容,希望文章能够帮你解决SQLite 通过.db文件导入已有数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1172855.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存