Android 数据库打包随APK发布

有些时候我们的软件用到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
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
import com.android.qufu.dinner.MealActivityGroup;
import com.android.qufu.dinner.R;
 
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
 
public class Loggin extends Activity {
    public static String dbName="dinner.db";//数据库的名字
    private static String DATABASE_PATH="/data/data/com.android.qufu.dinner/databases/";//数据库在手机里的路径
     int alpha = 255;
     int b = 0;
     
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);
            //判断数据库是否存在
            boolean dbExist = checkDataBase();
            if(dbExist){
                 
            }else{//不存在就把raw里的数据库写入手机
                try{
                    copyDataBase();
                }catch(IOException e){
                    throw new Error("Error copying database");
                }
            }
             
            new Thread(new Runnable() {
                public void 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();
 
            
        }
 
        public void updateApp() {
            alpha -= 5;
            if (alpha <= 0) {
                b = 2;
                if(true){
                try{
                   Intent in = new Intent(Loggin.this,MealActivityGroup.class);
                   Loggin.this.startActivity(in);
                   Loggin.this.finish();
                }catch(Exception e){
                         
                    }
                }
                
            }
            
        }
        /**
         * 判断数据库是否存在
         * @return false or true
         */
        public boolean 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();
            }
            return checkDB !=null?true:false;
        }
        /**
         * 复制数据库到手机指定文件夹下
         * @throws IOException
         */
        public void copyDataBase() throws IOException{
            String databaseFilenames =DATABASE_PATH+dbName;
            File dir = new File(DATABASE_PATH);
            if(!dir.exists())//判断文件夹是否存在,不存在就新建一个
                dir.mkdir();
            FileOutputStream os = null;
            try{
                os = new FileOutputStream(databaseFilenames);//得到数据库文件的写入流
            }catch(FileNotFoundException e){
                e.printStackTrace();
            }
            InputStream is = Loggin.this.getResources().openRawResource(R.raw.test);//得到数据库文件的数据流
            byte[] buffer = new byte[8192];
            int count = 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();
            }
        }
        /**
         * 初始化,这里是起始页的没有用
         */
        public void initApp(){         
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章