Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作

 

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

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

技术分享

 

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

 

[java] view plaincopy技术分享技术分享
 
  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技术分享技术分享
 
  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. }  


 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。