读取数据库+数据库版本更新

注意:

a, 将随apk发布的数据库放在android工程下/res/raw路径下。

b, 数据库文件存到手机上时,路径在/data/data/你的包名/databases下,其他路径则会出错。

需要直接在工程里新建数据库时,会继承SQLiteOpenHelper,但本文讲的是随apk一起发布数据库的情况,因此没有必要继承SQLiteOpenHelper,但也需要对test.db做一层包装,在对test.db进行包装的类对数据库进行操作。

编写程序的过程中经常改变数据库的结构,此时可以通过数据库版本号来判断是否应该更新手机上的数据库,sqlite中数据库的user_version提供了这个帮助。下面的命令可以更改数据库的user_version,user_version必须是整数型的。

PRAGMA [database.]user_version = 2 ;

下面是实现代码,包括将数据库写到手机上以及对数据库进行更新。

 1 public class TestSqlDatabase{ 2      3     private static final String DATABASE_PATH = "/data/data/your.package.name/databases"; 4  5     private static final int DATABASE_VERSION = 0; 6  7     private static final String DATABASE_NAME = "test.db"; 8      9     private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME;10     11     private Context context;12 13      private SQLiteDatabase database;14     15     public TestSqlDatabase(Context context) {16         this.context = context;17         18         File file = new File(outFileName);19         if (file.exists()) {20             database = SQLiteDatabase.openOrCreateDatabase(outFileName, null);21             if (database.getVersion() != DATABASE_VERSION) {22                 database.close();23                 file.delete();    24             }25         }26         try {27             buildDatabase();28         } catch (Exception e) {29             e.printStackTrace();30         }31         32     }33 34     private void buildDatabase() throws Exception{35         InputStream myInput = context.getResources().openRawResource(R.raw.test);36         File file = new File(outFileName);37         38         File dir = new File(DATABASE_PATH);39         if (!dir.exists()) {40             if (!dir.mkdir()) {41                 throw new Exception("创建失败");42             }43         }44         45         if (!file.exists()) {            46             try {47                 OutputStream myOutput = new FileOutputStream(outFileName);48                 49                 byte[] buffer = new byte[1024];50                 int length;51                 while ((length = myInput.read(buffer))>0){52                     myOutput.write(buffer, 0, length);53                 }54                 myOutput.close();55                 myInput.close();56             } catch (Exception e) {57                 e.printStackTrace();58             }59         60         }61     }62 }

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Bip44确定性算法的android实现
  3. android AutoCompleteTextView+ SQLite
  4. Android平台实现与Apache Tomcat服务器数据交互(MySql数据库)
  5. SqliteGen——自动生成 SQLite 数据库的访问类
  6. Android数据库(SQLite)的简单使用——增、删、查改功能的简单实现
  7. Android(安卓)SQLite数据库使用INTO子句创建新表时报错
  8. Android数据库ContentProvider封装原理
  9. 【黑马Android】(19)response下载文件/验证码/防盗链/URL编码/jsp

随机推荐

  1. android百度地图定位显示当前位置(androi
  2. x86平台下 Android(安卓)系统的 Linux 部
  3. Android(安卓)解屏幕锁与点亮屏幕
  4. android listView 总结
  5. android 系统服务 os service
  6. Android:透明状态栏的效果实现
  7. PHP基础:数据类型的演示
  8. android out目录结构
  9. android 划屏动画
  10. undefined reference to `android::Mutex