Android 数据库打包随APK发布

来源:互联网 发布:吾生也有涯 知也无涯 编辑:程序博客网 时间:2024/05/20 03:42
有些时候我们的软件用到SQLite数据库,这个时候怎么把一个做好的数据库打包进我们的APK呢,其实很简单,就是把我们的数据库文件放到我们的手机里,所以不必局限在哪个地方写这个代码,在第一次创建数据库的时候可以,我觉得在软件起动页里效果更好一点,首先我们应该把事先写好的数据库文件比如test.db放到res文件夹里的raw文件夹里,也可以放到assets里,因为这两个文件夹不会在生成APK的时候不会被压缩 
Android专业开发群1:150086842
Android专业开发群2:219277004
标签: SQLite

代码片段(1)[全屏查看所有代码]

1. [代码]Java代码     跳至 [1] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
 
importcom.android.qufu.dinner.MealActivityGroup;
importcom.android.qufu.dinner.R;
 
importandroid.app.Activity;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.SharedPreferences;
importandroid.content.pm.ActivityInfo;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteException;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.ImageView;
importandroid.widget.TextView;
 
publicclass Loggin extendsActivity {
    publicstatic String dbName="dinner.db";//数据库的名字
    privatestatic String DATABASE_PATH="/data/data/com.android.qufu.dinner/databases/";//数据库在手机里的路径
     intalpha = 255;
     intb = 0;
     
     publicvoid onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);
            //判断数据库是否存在
            booleandbExist = checkDataBase();
            if(dbExist){
                 
            }else{//不存在就把raw里的数据库写入手机
                try{
                    copyDataBase();
                }catch(IOException e){
                    thrownew Error("Error copying database");
                }
            }
             
            newThread(newRunnable() {
                publicvoid run() {
                    initApp();//初始化程序
                      
                    while(b < 2) {
                        try{
                            if(b == 0) {
                                Thread.sleep(20);
                                b = 1;
                            }else{
                                Thread.sleep(50);
                            }
                            updateApp();
                        }catch(InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
 
            
        }
 
        publicvoid updateApp() {
            alpha -= 5;
            if(alpha <= 0) {
                b = 2;
                if(true){
                try{
                   Intent in = newIntent(Loggin.this,MealActivityGroup.class);
                   Loggin.this.startActivity(in);
                   Loggin.this.finish();
                }catch(Exception e){
                         
                    }
                }
                
            }
            
        }
        /**
         * 判断数据库是否存在
         * @return false or true
         */
        publicboolean checkDataBase(){
            SQLiteDatabase checkDB = null;
            try{
                String databaseFilename = DATABASE_PATH+dbName;
                checkDB =SQLiteDatabase.openDatabase(databaseFilename, null,
                        SQLiteDatabase.OPEN_READONLY);
            }catch(SQLiteException e){
                 
            }
            if(checkDB!=null){
                checkDB.close();
            }
            returncheckDB !=null?true:false;
        }
        /**
         * 复制数据库到手机指定文件夹下
         * @throws IOException
         */
        publicvoid copyDataBase() throwsIOException{
            String databaseFilenames =DATABASE_PATH+dbName;
            File dir = newFile(DATABASE_PATH);
            if(!dir.exists())//判断文件夹是否存在,不存在就新建一个
                dir.mkdir();
            FileOutputStream os = null;
            try{
                os = newFileOutputStream(databaseFilenames);//得到数据库文件的写入流
            }catch(FileNotFoundException e){
                e.printStackTrace();
            }
            InputStream is = Loggin.this.getResources().openRawResource(R.raw.test);//得到数据库文件的数据流
            byte[] buffer = newbyte[8192];
            intcount = 0;
            try{
                 
                while((count=is.read(buffer))>0){
                    os.write(buffer,0, count);
                    os.flush();
                }
            }catch(IOException e){
                 
            }
            try{
                is.close();
                os.close();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        /**
         * 初始化,这里是起始页的没有用
         */
        publicvoid initApp(){         
        }
    }
0 0