android中如何读取已经在sqlite expert professional等sqlite工具设计好的数据库文件并且在程序中创建数据库

在我们经常开发android程序的时候,为了提高我们的开发效率和方便程序的维护性,一般是会在sqlite expert professional等sqlite工具设计好之后,放在assets文件夹下或者在res文件夹下创建raw文件夹存放已经设计好的数据库文件。由于之前在做android开发程序中涉及到sqlite开发的时候,都是在程序中用sql语句创建表。所以觉得有点麻烦,但是我们可以类似于主流数据库一样实现设计好数据库,在android通过我们标准的java的IO流实现数据库文件的读写进而创建数据库中的表。但是我比较习惯于放在assets下读取已经设计好的数据库文件。下面来看看我的实现代码吧........

我们实现定义好一个关于数据库信息的常量类(DBConfigurationConstant):

package com.book.constant;

import android.os.Environment;

public class DBConfigurationConstant {

	public static final String db_path="/data/data/com.book.activity/databases/";
	public static final String db_name="book.db";
	public static final String ASSETS_NAME="book.db";
	public static final  int DB_VERSION = 1;
	public static int oldVersion = -1;
}

接着我们定义一个DBHelper,专门负责对android中的sqlite数据库的操作:

package com.book.db;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

import com.book.activity.BookMainActivity;
import com.book.constant.DBConfigurationConstant;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper{
	private Context mContext;//定义上下文
	private SQLiteDatabase mydatabase;
	public DBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		mContext = context;
		// TODO Auto-generated constructor stub
	}
	/**
	 * 用于创建数据库
	 */
	public DBHelper(Context context, String name,int version){
		this(context, name, null, version);
	}
	public DBHelper(Context context, String name){
		this(context,name,DBConfigurationConstant.DB_VERSION);
	}
	public DBHelper(Context context){
		this(context,DBConfigurationConstant.db_path+DBConfigurationConstant.db_name);
	}
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
	}
	  /**
	   * 数据库升级时调用
	   * */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
	}
	/**
	 * 创建数据库中的表,我们只需调用这个函数就会实现在android中创建数据库和表,他的实质是通过java标准的文件流来实现
	 */
	public void createDatabase(){
			try{
				String databasePath=DBConfigurationConstant.db_path+DBConfigurationConstant.db_name;
				Log.i("Other", "创建数据库"+databasePath);
				File filedatabse=new File(databasePath);
				Log.i("Other", "是否存在"+filedatabse.exists());
		    	if(!filedatabse.exists()){
		    		//赋值asseets中的数据库文件到DB_PATH下
		    		filedatabse.getParentFile().mkdirs();
					copyDataBase(databasePath);
		    	}
				
			}catch(Exception e){
				e.printStackTrace();
			}
	}
	public void copyDataBase(String dbfile) throws Exception{
		InputStream ins=mContext.getAssets().open(DBConfigurationConstant.ASSETS_NAME);//得到放在assets文件夹下的已经创建好的数据库文件流
		FileOutputStream fos=new FileOutputStream(dbfile);
		byte[] buffer=new byte[1024];
		int length;
		while((length=ins.read(buffer))>0){//开始assets文件夹下的数据库文件写到android中下的
			fos.write(buffer, 0, length);
		}
		mydatabase=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
		fos.flush();
		fos.close();
		ins.close();
	}
}


你可能感兴趣的:(sqlite,android,android开发,io流,android)