zoukankan      html  css  js  c++  java
  • Android中用文件初始化sqlite 数据库(二)

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

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

  • 相关阅读:
    ELK 5.6.8 安装部署
    Port Forwarding in Windows
    python 压缩文件为zip后删除原文件
    Windows安装nginx服务
    redis 启动停止脚本
    使用sed替换指定文件指定行的指定文本
    auto和bool
    宽字符
    函数递归
    关于主机用户名显示为"-bash-4.1$"
  • 原文地址:https://www.cnblogs.com/bigben0123/p/4158087.html
Copyright © 2011-2022 走看看