很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据。

这里有2个思路

1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径

2.可以考虑在第一次启动时,执行数据库初始化的sql文件.

1.在本地准备android能使用的sqlite数据库文件

使用sqlite数据库管理工具,看个人爱好(SQLite Database Browser,Navicat Premium,)

打开数据库,创建"android_metadata"数据表

Sql代码  
  1. CREATE TABLE "android_metadata" ("_id"  INTEGER PRIMARY KEY AUTOINCREMENT,"locale" TEXT DEFAULT 'en_US');//创建表
  2. INSERT INTO "android_metadata" VALUES (1,'en_US');//插入值

创建其他应用需要的表..此处省略.

2.复制文件到应用中.

把第一步创建的数据库文件复制到应用中的assets文件夹, asserts文件夹的路径如下:

 

然后创建DateBaseHelper extends SQLiteOpenHelper的类文件.

代码如下:

Java代码  
  1. public class DataBaseHelper extends SQLiteOpenHelper {
  2. //The Android's default system path of your application database.
  3. private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
  4. private static String DB_NAME = "myDBName";
  5. private SQLiteDatabase myDataBase;
  6. private final Context myContext;
  7. /**
  8. * Constructor
  9. * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
  10. * @param context
  11. */
  12. public DataBaseHelper(Context context) {
  13. super(context, DB_NAME, null, 1);
  14. this.myContext = context;
  15. }
  16. /**
  17. * Creates a empty database on the system and rewrites it with your own database.
  18. * */
  19. public void createDataBase()throws IOException {
  20. boolean dbExist = checkDataBase();
  21. if (dbExist) {
  22. //do nothing - database already exist
  23. } else {
  24. //By calling this method and empty database will be created into the default system path
  25. //of your application so we are gonna be able to overwrite that database with our database.
  26. this.getReadableDatabase();
  27. try {
  28. copyDataBase();
  29. } catch (IOException e) {
  30. throw new Error("Error copying database");
  31. }
  32. }
  33. }
  34. /**
  35. * Check if the database already exist to avoid re-copying the file each time you open the application.
  36. * @return true if it exists, false if it doesn't
  37. */
  38. private boolean checkDataBase() {
  39. SQLiteDatabase checkDB = null;
  40. try {
  41. String myPath = DB_PATH + DB_NAME;
  42. checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  43. } catch (SQLiteException e) {
  44. //database does't exist yet.
  45. }
  46. if (checkDB != null) {
  47. checkDB.close();
  48. }
  49. return checkDB != null ? true : false;
  50. }
  51. /**
  52. * Copies your database from your local assets-folder to the just created empty database in the
  53. * system folder, from where it can be accessed and handled.
  54. * This is done by transfering bytestream.
  55. * */
  56. private void copyDataBase()throws IOException {
  57. //Open your local db as the input stream
  58. InputStream myInput = myContext.getAssets().open(DB_NAME);
  59. // Path to the just created empty db
  60. String outFileName = DB_PATH + DB_NAME;
  61. //Open the empty db as the output stream
  62. OutputStream myOutput = new FileOutputStream(outFileName);
  63. //transfer bytes from the inputfile to the outputfile
  64. byte[]buffer = new byte[1024];
  65. int length;
  66. while ((length = myInput.read(buffer)) > 0) {
  67. myOutput.write(buffer, 0, length);
  68. }
  69. //Close the streams
  70. myOutput.flush();
  71. myOutput.close();
  72. myInput.close();
  73. }
  74. public void openDataBase()throws SQLException {
  75. //Open the database
  76. String myPath = DB_PATH + DB_NAME;
  77. myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  78. }
  79. @Override
  80. public synchronized void close() {
  81. if (myDataBase != null)
  82. myDataBase.close();
  83. super.close();
  84. }
  85. @Override
  86. public void onCreate(SQLiteDatabase db) {}
  87. @Override
  88. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
  89. // Add your public helper methods to access and get content from the database.
  90. // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
  91. // to you to create adapters for your views.
  92. }

3.现在我们可以创建DateBaseHelper的实现操作了.

createDataBase() //创建

openDataBase()//打开只读数据库

记得要更改"YOUR_PACKAGE"为你的应用的包名

如:com.examplename.myapp

大概代码如下:

Java代码  
  1. ...
  2. DataBaseHelper myDbHelper = new DataBaseHelper();
  3. myDbHelper = new DataBaseHelper(this);
  4. try {
  5. myDbHelper.createDataBase();
  6. } catch (IOException ioe) {
  7. throw new Error("Unable to create database");
  8. }
  9. try {
  10. myDbHelper.openDataBase();
  11. } catch (SQLException sqle) {
  12. throw sqle;
  13. }
  14. ...  

android:Android中用文件初始化sqlite数据库(zz)的更多相关文章

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

    博 androidsqlite启动时数据库初始化  方法1已经讲述了一种初始化数据库的方法 它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系 ...

  2. android:Android中用文件初始化sqlite数据库

    很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据. 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的 ...

  3. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  4. Android菜鸟成长记11 -- sqlite数据库的设计和升降级

    Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...

  5. Android内部自带的SQLite数据库操作dos命令

    1:什么叫做SQLite数据库 Android系统内核是Linux系统,Android系统很特殊,他自带了一个SQLite数据库,轻量型的一款嵌入式的数据库 它占用资源非常的低,在嵌入式设备中,可能只 ...

  6. 在Android中查看和管理sqlite数据库

    在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databas ...

  7. Android 批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

  8. Android批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

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

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

随机推荐

  1. SpringBoot Controller接收参数的几种常用方

    第一类:请求路径参数 1.@PathVariable 获取路径参数.即url/{id}这种形式. 2.@RequestParam 获取查询参数.即url?name=这种形式 例子 GET http:/ ...

  2. Codeforces 1144G Two Merged Sequences dp

    Two Merged Sequences 感觉是个垃圾题啊, 为什么过的人这么少.. dp[ i ][ 0 ]表示处理完前 i 个, 第 i 个是递增序列序列里的元素,递减序列的最大值. dp[ i ...

  3. web实现下拉列表多选加搜索

    实现如图所示的下拉多选还能带有搜索功能. <!DOCTYPE html> <html> <head> <title></title> < ...

  4. python--return小练习

    #返回单个值,return a:#一个return后的语句不再执行,def calc_sum(*args): ax = 0 for n in args: ax = ax + nprint(ax); r ...

  5. P1330 封锁阳光大学 DFS

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...

  6. 不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)

    示例 1: 输入: [   [0,0,0],   [0,1,0],   [0,0,0] ] 输出: 2 解释: 3x3 网格的正中间有一个障碍物. 从左上角到右下角一共有 2 条不同的路径: 1. 向 ...

  7. Codeforces 1082D Maximum Diameter Graph (贪心构造)

    <题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...

  8. SpringBoot整合dubbo

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 以上介绍来源于百度百科,具体dubbo相关可以自行查 ...

  9. id生成器,分布式ID自增算法(Snowflake 算法)

    接口: /** * id生成器 */ public interface IdGenerator { String next(); } 实现类: /** * 分布式ID自增算法<br/> * ...

  10. 手动添加jar包到本地仓库

    最近写一个小项目需要用到阿里大鱼的短信功能,安装官网提供的maven及demo做了下测试,在测试过程中,发现导入的pom文件是无效的,也就是说本地的maven仓库中并么有我们pom中的依赖.于是我在网 ...