sql文件一般不应该由Android直接执行的,正常应该是先转成db文件直接放入Android中,Android只需执行一些简单sql命令。

但有时有这样的需求怎么办呢,比如你数据库是上个版本放进的,这个版本的更新就是一个sql文件,你重新放一个数据库那用户数据都没了。

这个还是很简单的,从assets读取到sql文件,转成String,获取writeableDatabase,然后执行sql就行了。

[java]  view plain  copy
  1. public class MainActivity extends Activity {  
  2.   
  3.     /** 
  4.      * 按行读取txt 
  5.      *  
  6.      * @param is 
  7.      * @return 
  8.      * @throws Exception 
  9.      */  
  10.     private String readTextFromSDcard(InputStream is) throws Exception {  
  11.         InputStreamReader reader = new InputStreamReader(is);  
  12.         BufferedReader bufferedReader = new BufferedReader(reader);  
  13.         StringBuffer buffer = new StringBuffer("");  
  14.         String str;  
  15.         while ((str = bufferedReader.readLine()) != null) {  
  16.             buffer.append(str);  
  17.             buffer.append("\n");  
  18.         }  
  19.         return buffer.toString();  
  20.     }  
  21.   
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_main);  
  26.   
  27.         SQLiteDatabase db = new DatabaseHelper(this"my.db")  
  28.                 .getWritableDatabase();  
  29.   
  30.         try {  
  31.   
  32.             InputStream in = getAssets().open("garden.sql");  
  33.   
  34.             String sqlUpdate = null;  
  35.             try {  
  36.                 sqlUpdate = readTextFromSDcard(in);  
  37.             } catch (Exception e) {  
  38.                 e.printStackTrace();  
  39.             }  
  40.             String[] s = sqlUpdate.split(";");  
  41.             for (int i = 0; i < s.length; i++) {  
  42.                 if (!TextUtils.isEmpty(s[i])) {  
  43.                     db.execSQL(s[i]);  
  44.                 }  
  45.             }  
  46.             in.close();  
  47.         } catch (SQLException e) {  
  48.         } catch (IOException e) {  
  49.         }  
  50.   
  51.     }  
  52.   
  53. }  
只有一个要注意的地方,执行sql时只会执行到分号的位置,所以要按分号分割,执行多次。执行完后在/data/data/packageName下面就可以看到db文件了。

更多相关文章

  1. Android的XML布局文件中layout_width和width的区别
  2. 【攻克Android (2)】Android各版本、app开发流程、apk构建过程
  3. Android 资源文件介绍
  4. 简单的 Android 系统主要版本对比图表
  5. Android执行文件apk的组成结构
  6. Android获取App版本号和版本名
  7. Android的读写文件权限
  8. android 删除文件以及递归删除文件夹

随机推荐

  1. android同一个程序中使用多个地图出现混
  2. Android(安卓)实现TextView中文字链接的
  3. 使用AudioTrack播放PCM音频数据(android)
  4. Android学习笔记_布局文件属性的说明
  5. Android(安卓)Choreographer 源码笔记
  6. android:configChanges属性
  7. 详解 Android(安卓)的 Activity 组件
  8. Android中的手势
  9. Service与Android系统实现(1)
  10. Android中Activity启动模式详解