android -sqlite 从已有的.db文件创建数据库链接

前段时间写的一个项目里面的需求,要从一个已有的数据库文件创建一个数据库连接,反复试验和研究api之后终于实现:

代码:

public class DatabaseConnection {

	public SQLiteDatabase getDatabase( Context context) {
		if(this.database == null)
			database = this.openDatabase(context);
		
		return database;
	}

	public static DatabaseConnection getConn() {
		if (conn == null) {
			conn = new DatabaseConnection();
		}
		return conn;
	}
	
	private SQLiteDatabase database = null;


	

	private static DatabaseConnection conn = null;

	private DatabaseConnection() {

	}

	private static String rootDirectory = "/data/data/pos/";
	// private final String DATABASE_PATH =
	// android.os.Environment.getExternalStorageDirectory().getAbsolutePath()
	// + "/rexen_mobile_db";
	private static final String DATABASE_FILENAME = "rx_posm.db";

	// 复制小于1M的数据库程序
	private SQLiteDatabase openDatabase(Context context) {
		try {
			// 获得rx_mobile.db文件的绝对路径
			String databaseFilename = rootDirectory + "/" + DATABASE_FILENAME;
			File dir = new File(rootDirectory);
			// 如果目录不中存在,创建这个目录
			if (!dir.exists())
				dir.mkdir();
			// 如果在目录中不存在
			// dictionary.db文件,则从res\raw目录中复制这个文件到
			// 指定的目录
			if (!(new File(databaseFilename)).exists()) {
				System.out.println("file is not exists!");
				// 获得封装dictionary.db文件的InputStream对象
				InputStream is = null;
				is = context.getResources().openRawResource(R.raw.rx_posm);
				FileOutputStream fos = new FileOutputStream(databaseFilename);
				byte[] buffer = new byte[117760];
				int count = 0;
				// 开始复制dictionary.db文件
				while ((count = is.read(buffer)) > 0) {
					fos.write(buffer, 0, count);
					System.out.println("file is write");
				}
				fos.close();
				is.close();
			}
			// 打开.db文件
			SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
					databaseFilename, null);
			return database;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	
	/**
	 * 执行查询语句 返回cursor
	 * @param database 数据库连接
	 * @param table_name表名
	 * @param cols列名集合
	 * @param selection where子句
	 * @param args 参数集合
	 * @return cursor
	 */
	public Cursor getCursorByQuery( String table_name,String[]cols,String selection,String [] args,Context context){
		SQLiteDatabase database = this.getDatabase( context);
		return database.query(table_name, cols, selection, args, null, null, null);
	}
	/**
	 * 执行查询语句 返回cursor
	 * @param database 数据库连接
	 * @param table_name表名
	 * @param cols列名集合
	 * @param selection where子句
	 * @param args 参数集合
	 * @param order ORDER BY 子句
	 * @return cursor
	 */
	public Cursor getCursorByQuery( String table_name,String[]cols,String selection,String [] args,String order,Context context){
		SQLiteDatabase database = this.getDatabase( context);
		return database.query(table_name, cols, selection, args, null, null, order);
	}
	
	/**
	 * 向数据库插入一条数据并返回行id
	 * @param context
	 * @param table_name
	 * @param value
	 * @return
	 */
	public long insertIntoDB(Context context,String table_name,ContentValues value){
		SQLiteDatabase database = this.getDatabase( context);
		long rowId = database.insert(table_name, null, value);
		return rowId;
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值