首页 > 代码库 > android数据库(随apk一起发布数据库)
android数据库(随apk一起发布数据库)
读取数据库+数据库版本更新
注意:
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 }
android数据库(随apk一起发布数据库)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。