Android中用文件初始化sqlite 数据库(二)

androidsqlite启动时数据库初始化

方法1已经讲述了一种初始化数据库的方法

它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径中。我一方面不太放心这种二进制文件的直接copy,另一方面,如果sqlite数据库的二进制结构有所升级或变动,我的程序就无法对所有sqlite版本兼容了。

方法2:在启动时,执行sql文件进行数据库初始化.

SQLiteOpenHelper的onCreate仅在程序第一次使用数据库时执行,然后执行onCreate;此后的执行就会跳过onCreate,直接执行onOpen。因此完全无需自己去检测数据库是否最在.

以下按照SQLiteOpenHelper的”正确“使用方法,本人写的SQLiteOpenHelper的子类,你可以用它初始你的Android数据库。数据库用sql语句形式,放在项目的res / raw目录底下,记住每行一条语句(因为我用readline()来读源文件),不能换行!你可以用本地数据库导出工具,此处省略数据导出。

代码如下:

Java代码  

  1. /**
  2. *
  3. */
  4. package com.yourpackage;
  5. import java.io.BufferedReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.InputStreamReader;
  10. import android.content.Context;
  11. import android.database.sqlite.SQLiteDatabase;
  12. import android.database.sqlite.SQLiteOpenHelper;
  13. /**
  14. * @author fan.zhang
  15. *
  16. */
  17. public class DataBaseHelper extends SQLiteOpenHelper {
  18. private static String DB_PATH = "/data/data/your_package_name/databases/";
  19. private static final String DB_NAME = "your_db_name.db";
  20. private SQLiteDatabase myDataBase;
  21. private final Context myContext;
  22. public FileSQLiteHelp(Context context) {
  23. super(context, DB_NAME, null, 1);
  24. this.myContext = context;
  25. }
  26. /**
  27. * inital your database from your local res-raw-folder to the just created
  28. * empty database in the system folder, from where it can be accessed and
  29. * handled.
  30. * */
  31. private void initDataBase()throws IOException {
  32. // Open your local db as the input stream
  33. // InputStream myInput = myContext.getAssets().open(DB_NAME);
  34. InputStream myInput = myContext.getResources().openRawResource(
  35. R.raw.your_db_file_name);
  36. InputStreamReader reader = new InputStreamReader(myInput);
  37. BufferedReader breader = new BufferedReader(reader);
  38. // Path to the just created empty db
  39. String outFileName = DB_PATH + DB_NAME,
  40. str;
  41. // Open the empty db as the output stream
  42. FileWriter myOutput = new FileWriter(outFileName, true);
  43. while ((str = breader.readLine()) != null) {
  44. myDataBase.execSQL(str); //exec your SQL line by line.
  45. }
  46. // Close the streams
  47. myOutput.flush();
  48. myOutput.close();
  49. myInput.close();
  50. }
  51. /*
  52. * (non-Javadoc)
  53. *
  54. * @see
  55. * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
  56. * .SQLiteDatabase)
  57. */
  58. @Override
  59. public void onCreate(SQLiteDatabase db) {
  60. // TODO Auto-generated method stub
  61. myDataBase = db;
  62. try {
  63. this.initDataBase();
  64. } catch (IOException e) {
  65. // TODO Auto-generated catch block
  66. e.printStackTrace();
  67. }
  68. }
  69. @Override
  70. public void onOpen(SQLiteDatabase db) {
  71. boolean readOnly = db.isReadOnly();
  72. }
  73. /*
  74. * (non-Javadoc)
  75. *
  76. * @see
  77. * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
  78. * .SQLiteDatabase, int, int)
  79. */
  80. @Override
  81. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  82. // TODO Auto-generated method stub
  83. }
  84. }

可以按正常逻辑用DataBaseHelper.getReadableDatabase()来使用你的数据库了。

时间: 2024-10-04 07:46:26

Android中用文件初始化sqlite 数据库(二)的相关文章

Android——使用SQLiteDatabase操作SQLite数据库

除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是

Android 查看和管理sqlite数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDMS 2.切换到DDMS,显示File Explorer窗口,找到/data/data/ 然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了.选择将

Android学习笔记(42):SQLite数据库

(1)SQLite数据库 先简单介绍一下SQLite数据库: 2000年由D.Richard Hipp发布. 是一款轻型.开源嵌入式关系数据库,占用资源非常低.目前用于很多嵌入式产品中,在嵌入式设备中,SQLite可能只需要几百K的内存就够了. 与Mysql.PostgreSQL这两款开源世界著名的数据库管理系统相比,它的处理速度更快. 在Android平台下,除了可以在Android程序中操作SQLite数据库之外,还可以在命令行模式下进行各种数据库的操作,包括表的各种操作,对数据的增加.删除

通过adb shell操作android真机的SQLite数据库

要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该大家都知道,不过一般情况下,在/system/xbin/目录下, 没有sqlite3命令,需要手动copy一个进去,通常情况下,需要两个文件 sqlite3.libncurses.so 解压后两个文件都有了,比如解压到:~/Downloads/sqlite3/ 然后就是通过下面的这些个命令,一步一步

Android开发之通过Android的API对sqlite数据库的操作以及数据库事务的练习

一.通过Android的API对sqlite数据库的操作 通过已有的ContentValues类,实例一个对象value来调用其中内部的方法来操作sqlite数据库 代码: package com.example.databasedemo; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sql

SharedPreferences数据、openFileOutput文件、SQLite数据库文件存储位置

在模拟器中: SharedPreferences将XML文件保存在/data/data/<package name>/shared_prefs目录下, openFileOutput方法将文件保存在/data/data/<package name>/files目录下 SQLite数据库文件存放在/data/data/<package name>/databases目录下 SharedPreferences数据.openFileOutput文件.SQLite数据库文件存储位

cocos2d-x 2.1 Win32+Android开发中的sqlite数据库加密技术探讨

注意:本博客转移自本人约一年前的ITPUB博客文章,为的是便于学员参考之用. 很显然,cocos2d-x编程中只了解基本的sqlite数据库操作技术只是一个开头,真正把此数据库数据应用于实际中不使用一定的加密及解密技术几乎是不行的. 这个问题尽早会来到我面前,这不?现在就来了.一开始,自然想使用最省工的了:但是,这样的好事并不多,极少极少...... 于是,我先搜罗了一些现成的文章拿来一阅. 1,Sqlite数据库加密解密 SRC: http://blog.sina.com.cn/s/blog_

Android数据存储引擎---SQLite数据库

目标:是否可以在PC端桌面上使用SQLite数据库制作一个财务文件? 目录: 来源: 实践: 总结和比较: SQLite数据简介 是什么,内部结构是怎样的,数据库和表的关系是什么 有什么用 常用的操作是什么 SQLite数据库使用 增 删 改 查 SQLite数据库实践上的优化措施 对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,使我们轻松完成对数据的存取. 步骤1,熟悉创建数据库表,熟悉相关的操作指令,实现对SQLite数据库的感性认识 创建一个包含简单内容的数

Android——采用SQLiteDatabase操作SQLite数据库

除了能够使用文件或SharedPreferences存储数据.还能够选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,尽管它支持的类型仅仅有五种,但实际上sqlite3也接受varchar(n).char(n).decimal(p,s) 等数据类型.仅仅只是在运算或保存时会转成相应的五种数据类型. SQLite最大的特