当前位置:Gxlcms > 数据库问题 > 在把数据库文件放在raw中,在应用程序中如何打开

在把数据库文件放在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中,在应用程序中如何打开

标签:

人气教程排行