博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用外部sqlite文件。mark之
阅读量:4116 次
发布时间:2019-05-25

本文共 1836 字,大约阅读时间需要 6 分钟。

要在Android系统中操作SQLite数据库,是通过Android的核心类SQLiteDatabase类来实现的,通常情况下为了数据库升级的需要以及使用方便,我们会选择继承SQLiteOpenHelper抽像类,但是SQLiteOpenHelper会将数据库文件创建在一个固定的目录(内存的/data/data/<package name/databases>目录中),如果你想使用已经存在的数据库文件也就是说数据库会和程序一起发布,就得通过使用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对象,就能对数据库操作了

转载地址:http://khwpi.baihongyu.com/

你可能感兴趣的文章
数组里的随机数问题
查看>>
vue 组件库
查看>>
省选专练JSOI2007合金
查看>>
和Leo一起做爱数学的好孩子之CERC2017 Gambling Guide
查看>>
POJ 1328
查看>>
第三次作业
查看>>
LightOj 1215 Finding LCM
查看>>
Cheatsheet: 2012 05.04 ~ 05.15
查看>>
怎样充分借助互联网自学
查看>>
洛谷 [P2764]最小路径覆盖问题
查看>>
Siteserver平台搭建
查看>>
将博客搬至CSDN
查看>>
8.装饰模式(Decorator Pattern)
查看>>
OpenGL12-shader(GLSL)着色语言2-(参数传递)(代码以上传)
查看>>
谈谈我对正则表达式的认识
查看>>
[2018湖南省队集训] 6.24 T1 marshland
查看>>
java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
查看>>
linux 安装python3
查看>>
第27月第6天 gcd timer
查看>>
通过图片对比带给你不一样的KMP算法体验
查看>>