Android 关于 如何使用外界导入的数据库文件

来源:互联网 发布:网络规划与设计 编辑:程序博客网 时间:2024/06/05 04:35
[java] view plaincopy
  1. package com.jamin;  
  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.content.Context;  
  10. import android.content.res.Resources.NotFoundException;  
  11. import android.database.sqlite.SQLiteDatabase;  
  12. import android.os.Environment;  
  13.   
  14. public class DBManager {  
  15.   
  16.     private final int BUFFER_SIZE = 400000;  
  17.     public static final String DB_NAME = "callattribution.db";  
  18.     public static final String PACKAGE_NAME = "com.jamin";  
  19.     public static final String DB_PATH = "/data"  
  20.                         + Environment.getDataDirectory().getAbsolutePath() + "/"  
  21.                         + PACKAGE_NAME;  
  22.     private SQLiteDatabase database;  
  23.     private Context context;  
  24.       
  25.     DBManager(Context context){  
  26.         this.context = context;  
  27.           
  28.     }  
  29.     public void openDatabase(){  
  30.         this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);  
  31.     }  
  32.       
  33.     public SQLiteDatabase openDatabase(String path){  
  34.   
  35.         try {  
  36.             if(!(new File(path).exists())){  
  37.                 InputStream is = this.context.getResources().openRawResource(R.raw.callattribution);//导入数据库  
  38.                 FileOutputStream fos = new FileOutputStream(path);  
  39.                 byte [] buffer = new byte[BUFFER_SIZE];  
  40.                 int count = 0;  
  41.   
  42.                 while((count = is.read(buffer))>0){  
  43.                     fos.write(buffer , 0 , count);  
  44.                 }  
  45.                 fos.close();  
  46.                 is.close();  
  47.   
  48.             }  
  49.             SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);  
  50.             return db;  
  51.               
  52.         } catch (NotFoundException e) {  
  53.             // TODO Auto-generated catch block  
  54.             e.printStackTrace();  
  55.         } catch (FileNotFoundException e) {  
  56.             // TODO Auto-generated catch block  
  57.             e.printStackTrace();  
  58.         }catch (IOException e) {  
  59.             // TODO Auto-generated catch block  
  60.             e.printStackTrace();  
  61.         }  
  62.   
  63.   
  64.         return null;  
  65.     }  
  66.     public void closeDatabase(){  
  67.         this.database.close();  
  68.     }  
  69.   
  70. }  



[java] view plaincopy
  1. <pre name="code" class="java">package com.jamin;  
  2.   
  3. import android.app.Activity;  
  4. import android.database.Cursor;  
  5. import android.database.sqlite.SQLiteDatabase;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Button;  
  11. import android.widget.EditText;  
  12. import android.widget.TextView;  
  13.   
  14. public class CallAtributionActivity extends Activity implements OnClickListener{  
  15.     /** Called when the activity is first created. */  
  16.       
  17.     Button button;  
  18.     EditText et;  
  19.     TextView tv;  
  20.     public DBManager dbhelper;  
  21.     SQLiteDatabase sqldb;  
  22.     private static final String TAG = "jamin";  
  23.       
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.           
  29.         button = (Button) findViewById(R.id.button);  
  30.         et = (EditText) findViewById(R.id.edittext);  
  31.         tv = (TextView) findViewById(R.id.textview);  
  32.         dbhelper = new DBManager(this);  
  33.         dbhelper.openDatabase();  
  34.         dbhelper.closeDatabase();  
  35.         button.setOnClickListener(this);  
  36.         sqldb = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_NAME, null);  
  37.           
  38.     }  
  39.   
  40.     public void onClick(View v) {  
  41.         // TODO Auto-generated method stub  
  42.         if(v == button){  
  43.             Log.d(TAG, "onClick");  
  44.             String searchstring = et.getText().toString();  
  45.               
  46.             Cursor c = sqldb.rawQuery("select city from attribution where " +"num=" +Integer.parseInt(searchstring) , null);  
  47.               
  48.             c.moveToFirst();  
  49.             tv.setText(c.getString(c.getColumnIndex("city")));  
  50.         }  
  51.     }  
  52.       
  53. }  


这个代码还存在很多BUG,只是演示如何使用导入的数据库,把DB文件放到res/raw下,然后通过DBManager 把数据库导入data/data/里