在把数据库文件放在raw中,在应用程序中如何打开
时间:2021-07-01 10:21:17
帮助过:1人阅读
package com.zyh.zyhimportdatabase;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6
7 import android.content.Context;
8 import android.database.sqlite.SQLiteDatabase;
9 import android.os.Environment;
10
11 public class DbManager {
12 private static final int BUFFER_SIZE = 1024
;
13 private static final String DB_NAME = "person2.db"
;
14 private static final String PACKAGE_NAME = "com.zyh.zyhimportdatabase"
;
15 private static final String DB_PATH = "/data" +
16 Environment.getDataDirectory().getAbsolutePath() + "/" +
PACKAGE_NAME;
17
18 private SQLiteDatabase database;
19 private Context context;
20
21 public DbManager(Context context){
22 this.context =
context;
23 }
24
25 public void openDatabase(){
26 this.database =
this.openDatabase(DB_PATH + "/" +
DB_NAME);
27 }
28
29 private SQLiteDatabase openDatabase(String dbFile) {
30 try {
31 File db_file =
new File(dbFile);
32 if(!
db_file.exists()){
33 InputStream is =
this.context.getResources().openRawResource(R.raw.person2);
34 FileOutputStream fos =
new FileOutputStream(dbFile);
35 byte[] buffer =
new byte[BUFFER_SIZE];
36 int len = 0
;
37 while((len = is.read(buffer)) > 0
){
38 fos.write(buffer, 0
, len);
39 }
40 fos.close();
41 is.close();
42 }
43
44 SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(db_file,
null);
45 return db;
46 }
catch (Exception e) {
47 // TODO Auto-generated catch block
48 e.printStackTrace();
49 }
50 return null;
51 }
52
53 public SQLiteDatabase getDb(){
54 return this.database;
55 }
56
57 public void closeDatabase(){
58 this.database.close();
59 }
60 }
2、activity代码
1 package com.zyh.zyhimportdatabase;
2
3 import android.os.Bundle;
4 import android.os.Environment;
5 import android.util.Log;
6 import android.app.Activity;
7 import android.database.sqlite.SQLiteDatabase;
8
9 public class MainActivity extends Activity {
10
11 @Override
12 protected void onCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.activity_main);
15
16 //Log.i("zyh", Environment.getDataDirectory().getAbsolutePath());
17 DbManager dbHelper = new DbManager(getApplicationContext());
18 dbHelper.openDatabase();
19 SQLiteDatabase db = dbHelper.getDb();
20 System.out.println(db.isReadOnly());
21 dbHelper.closeDatabase();
22
23 }
24
25 }
上述代码的参考:http://www.cnblogs.com/xiaowenji/archive/2011/01/03/1925014.html
注意:A、关于对getReadableDatabase()的误区:可以参考http://blog.csdn.net/liuhe688/article/details/6715983/和http://blog.chinaunix.net/uid-22816738-id-3802353.html
B、关于多线程对db的使用,正确的方法可以参考:http://blog.csdn.net/sky_monkey/article/details/23820021
在把数据库文件放在raw中,在应用程序中如何打开
标签: