zoukankan      html  css  js  c++  java
  • Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作

     

      当我们在使用SQLiteOpenHelper时,经常使用db.execSQL(String sql)方法写入对应语句实现创建表的操作,这样的确可以实现业务逻辑。与此同时还有一种更灵活的方法,从assets文件夹下读取对应的.sql文件,然后创建表。

      1.首先在工程的assets文件夹下,添加对应的.sql文件
       

     2.配置一个Configuration类,用于保存固定路径变量

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. public class Configuration {  
    2.     public static final String DB_PATH = "schema";  
    3.     public static final String DB_NAME = "test.db";  
    4.     public static final int DB_VERSION = 1;  
    5.     public static int oldVersion = -1;  
    6.       
    7. }  

    3.逻辑实现类,executeAssetsSQL方法用于向Assets文件夹对应的路径读取SQL语句然后执行创建操作

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. public class DBHelper extends SQLiteOpenHelper {  
    2.   
    3.     private Context mContext;  
    4.   
    5.     public DBHelper(Context context, String databaseName,  
    6.             CursorFactory factory, int version) {  
    7.         super(context, databaseName, factory, version);  
    8.         mContext = context;  
    9.     }  
    10.   
    11.     /** 
    12.      * 数据库第一次创建时调用 
    13.      * */  
    14.     @Override  
    15.     public void onCreate(SQLiteDatabase db) {  
    16.         executeAssetsSQL(db, "schema.sql");  
    17.         System.out.println("创建表");  
    18.     }  
    19.   
    20.     /** 
    21.      * 数据库升级时调用 
    22.      * */  
    23.     @Override  
    24.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
    25.         //数据库不升级  
    26.         if (newVersion <= oldVersion) {  
    27.             return;  
    28.         }  
    29.         Configuration.oldVersion = oldVersion;  
    30.   
    31.         int changeCnt = newVersion - oldVersion;  
    32.         for (int i = 0; i < changeCnt; i++) {  
    33.             // 依次执行updatei_i+1文件      由1更新到2 [1-2],2更新到3 [2-3]  
    34.             String schemaName = "update" + (oldVersion + i) + "_"  
    35.                     + (oldVersion + i + 1) + ".sql";  
    36.             executeAssetsSQL(db, schemaName);  
    37.         }  
    38.     }  
    39.   
    40.     /** 
    41.      * 读取数据库文件(.sql),并执行sql语句 
    42.      * */  
    43.     private void executeAssetsSQL(SQLiteDatabase db, String schemaName) {  
    44.         BufferedReader in = null;  
    45.         try {  
    46.             in = new BufferedReader(new InputStreamReader(mContext.getAssets()  
    47.                     .open(Configuration.DB_PATH + "/" + schemaName)));  
    48.               
    49.             System.out.println("路径:"+Configuration.DB_PATH + "/" + schemaName);  
    50.             String line;  
    51.             String buffer = "";  
    52.             while ((line = in.readLine()) != null) {  
    53.                 buffer += line;  
    54.                 if (line.trim().endsWith(";")) {  
    55.                     db.execSQL(buffer.replace(";", ""));  
    56.                     buffer = "";  
    57.                 }  
    58.             }  
    59.         } catch (IOException e) {  
    60.             Log.e("db-error", e.toString());  
    61.         } finally {  
    62.             try {  
    63.                 if (in != null)  
    64.                     in.close();  
    65.             } catch (IOException e) {  
    66.                 Log.e("db-error", e.toString());  
    67.             }  
    68.         }  
    69.     }  
    70.   
    71. }  


     

  • 相关阅读:
    摄像头距离标定方法研究(得到像素和毫米的转换比)
    mfc通过消息传递参数进行程序间通信
    基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)
    【20160924】GOCVHelper MFC增强算法(4)
    【20160924】GOCVHelper 图像处理部分(3)
    Xamarin Essentials教程使用指南针Compass
    Xamarin Essentials教程使用加速度传感器Accelerometer
    XamarinSQLite教程下载安装SQLite/SQL Server Compact Toolbox
    Xamarin Essentials教程屏幕常亮ScreenLock
    Xamarin Essentials教程振动Vibration
  • 原文地址:https://www.cnblogs.com/bigben0123/p/4245701.html
Copyright © 2011-2022 走看看