读取数据库+数据库版本更新

注意:

a, 将随apk发布的数据库放在android工程下/res/raw路径下。

b, 数据库文件存到手机上时,路径在/data/data/你的包名/databases下,其他路径则会出错。

需要直接在工程里新建数据库时,会继承SQLiteOpenHelper,但本文讲的是随apk一起发布数据库的情况,因此没有必要继承SQLiteOpenHelper,但也需要对test.db做一层包装,在对test.db进行包装的类对数据库进行操作。

编写程序的过程中经常改变数据库的结构,此时可以通过数据库版本号来判断是否应该更新手机上的数据库,sqlite中数据库的user_version提供了这个帮助。下面的命令可以更改数据库的user_version,user_version必须是整数型的。

PRAGMA [database.]user_version = 2 ;

下面是实现代码,包括将数据库写到手机上以及对数据库进行更新。

 public class TestSqlDatabase{

     private static final String DATABASE_PATH = "/data/data/your.package.name/databases";

     private static final int DATABASE_VERSION = 0;

     private static final String DATABASE_NAME = "test.db";

     private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME;

     private Context context;

      private SQLiteDatabase database;

     public TestSqlDatabase(Context context) {
this.context = context; File file = new File(outFileName);
if (file.exists()) {
database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);
if (database.getVersion() != DATABASE_VERSION) {
database.close();
file.delete();
}
}
try {
buildDatabase();
} catch (Exception e) {
e.printStackTrace();
} } private void buildDatabase() throws Exception{
InputStream myInput = context.getResources().openRawResource(R.raw.test);
File file = new File(outFileName); File dir = new File(DATABASE_PATH);
if (!dir.exists()) {
if (!dir.mkdir()) {
throw new Exception("创建失败");
}
} if (!file.exists()) {
try {
OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.close();
myInput.close();
} catch (Exception e) {
e.printStackTrace();
} }
}
}

android数据库(随apk一起发布数据库)的更多相关文章

  1. Android -- sqlite数据库随apk发布

    背景                                                                                            把在工程中测 ...

  2. Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

    前言 SQLite数据库操作在Android开发中非常常用 今天我将带大家全面了解关于SQLite数据库的操作(增.删.查.改) 目录 1. SQLite数据库介绍 SQLite是Android内置的 ...

  3. .NET足球赛事资料数据库平台SmartLottery开源发布——全球足球联赛应有尽有

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 前2个月,我的系列文 ...

  4. Android监听系统短信数据库变化-提取短信内容

    由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...

  5. 附加数据库后无法创建发布,error 2812 解决

    日前,由于业务需要,我要把一个数据库直接迁移到新的实例上 用的方法比较古老,就是直接停旧服务器,将数据文件复制到新服务器上,附加数据库 当然这个附加没有什么可说的了,但是在附加后需要将原来库上的发布重 ...

  6. android SQLite使用SQLiteOpenHelper类对数据库进行操作

    android SQLite使用SQLiteOpenHelper类对数据库进行操作 原文: http://byandby.iteye.com/blog/835580

  7. Android:查看应用创建的数据库

    每个Android应用程序都可以使用SQLite数据库.它创建的位置在data/data/<项目文件夹>/databases/ 运行后打开,window->show view-> ...

  8. Android adb使用sqlite3对一个数据库进行sql查询

    sqlite是Android下集成的一个轻量级数据库,我们可以通过adb程序进入数据库命令行,对数据进行查询,具体操作如下: ①打开windows的cmd ②输入adb shell.此时进入了该安卓系 ...

  9. Android中多表的SQLite数据库(译)

    原文: Android SQLite Database with Multiple Tables 在上一篇教程Android SQLite Database Tutorial中,解释了如何在你的And ...

随机推荐

  1. js获取当前浏览器页面高度及宽度信息的方法

    var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft); var scroll ...

  2. php实现调用微信上传照片然后保存至服务器与数据库

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>    <s ...

  3. Asp.Net MVC结合ExtJs gridPanel 分页和高度自适应

    Ext.onReady(function () { gridPanel(); var panel = Ext.getCmp('gridPanel'); window.onresize = functi ...

  4. Netty4.x中文教程系列(一) Hello World !

    1.下载并为项目添加Netty框架 1. Netty的包大家可以从Netty官网:http://netty.io/downloads.html 下载 如图所示: Netty提供了四个个主要版本的框架包 ...

  5. 现在不使用ZeroClipboard我们也能实现复制功能(转)

    现在不使用ZeroClipboard我们也能实现 首先,我们保证页面结构不变,但不在引入ZeroClipboard插件: 1 <input type="text" name= ...

  6. Scroll文字滚动js

    function ScrollImgLeft(){ var speed=50, doc=document, scroll_begin = doc.getElementById("scroll ...

  7. uva 1421

    稍微有点新意的二分 #include<cstdio> #include<cstring> #include<algorithm> #include<cmath ...

  8. HDU4756+Prim

    题意简单:去掉最小生成树的某一条边并补上一条,求MaxVal 思路:贪心(借鉴Yamidie的思路...) 分别求出最小生成树和次最小生成树,再在这两棵树上求最小生成树 #include<std ...

  9. maven 如何解决因本地jar导致的编译错误

    如何解决Maven依赖本地非repository中的jar包,依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理.http://www.mamicode.com/info-det ...

  10. Qt之启动外部程序(调用cmd.exe ping putty winscp 管道等等,比较牛叉)

    http://blog.csdn.net/u011012932/article/details/50478833