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)