Android开发点滴(13) Android数据库随同Android应用一同发布

实现方法:将Android数据库文件放到res/raw目录下,然后读取db文件,并且将其写到data/data/pkg_name/databases/目录下,获取SDCard中。

 1 package com.sqllite.activity;
 2 
 3 import java.io.File;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 
 9 import android.app.Activity;
10 import android.content.res.Resources;
11 import android.database.Cursor;
12 import android.database.sqlite.SQLiteDatabase;
13 import android.os.Bundle;
14 
15 public class SqlLiteActivity extends Activity {
16     private File file = null;
17     private File dir = null;
18 
19     @Override
20     public void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.main);
23 
24         // 第一次运行应用程序时,加载数据库到data/data/<pkg_name>/database/<db_name>
25         dir = new File("data/data/" + getPackageName() + "/databases");
26         if (!dir.exists() || !dir.isDirectory()) {
27             dir.mkdir();
28         }
29         file = new File(dir, "db.db3");
30 
31         if (!file.exists()) {
32             FileUtils.loadDbFile(R.raw.db, file, getResources(),
33                     getPackageName());
34         }
35 
36         // 读取数据库
37         
38         SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(file, null);
39         //SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);
40         Cursor cursor = db.query("people"new String[] { "id""name""age""address" },
41                 nullnullnullnullnull);
42         
43         while(cursor.moveToNext()){
44             System.out.println(cursor.getInt(0));
45         }
46         cursor.close();
47     }
48 
49 }
50 
51 class FileUtils {
52 
53     public static void loadDbFile(int rawId, File file, Resources res,
54             String pkgname) {
55         InputStream dbInputStream = res.openRawResource(R.raw.db);
56         FileOutputStream fos = null;
57 
58         try {
59             fos = new FileOutputStream(file);
60 
61             byte[] bytes = new byte[1024];
62             int length;
63             while ((length = dbInputStream.read(bytes)) > 0) {
64                 fos.write(bytes, 0, length);
65             }
66 
67         } catch (FileNotFoundException e) {
68             // TODO Auto-generated catch block
69             e.printStackTrace();
70         } catch (IOException e) {
71             // TODO Auto-generated catch block
72             e.printStackTrace();
73         } finally {
74             try {
75                 fos.close();
76                 dbInputStream.close();
77             } catch (IOException e) {
78                 // TODO Auto-generated catch block
79                 e.printStackTrace();
80             }
81         }
82     }
83 }
原文地址:https://www.cnblogs.com/cody1988/p/2224366.html