您的位置:首页 > 移动开发 > Android开发

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

2012-03-24 23:01 1216 查看
[java] view
plaincopy

package com.jamin;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import android.content.Context;

import android.content.res.Resources.NotFoundException;

import android.database.sqlite.SQLiteDatabase;

import android.os.Environment;

public class DBManager {

private final int BUFFER_SIZE = 400000;

public static final String DB_NAME = "callattribution.db";

public static final String PACKAGE_NAME = "com.jamin";

public static final String DB_PATH = "/data"

+ Environment.getDataDirectory().getAbsolutePath() + "/"

+ PACKAGE_NAME;

private SQLiteDatabase database;

private Context context;

DBManager(Context context){

this.context = context;

}

public void openDatabase(){

this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);

}

public SQLiteDatabase openDatabase(String path){

try {

if(!(new File(path).exists())){

InputStream is = this.context.getResources().openRawResource(R.raw.callattribution);//导入数据库

FileOutputStream fos = new FileOutputStream(path);

byte [] buffer = new byte[BUFFER_SIZE];

int count = 0;

while((count = is.read(buffer))>0){

fos.write(buffer , 0 , count);

}

fos.close();

is.close();

}

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path, null);

return db;

} catch (NotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

public void closeDatabase(){

this.database.close();

}

}

[java] view
plaincopy

<pre name="code" class="java">package com.jamin;

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class CallAtributionActivity extends Activity implements OnClickListener{

/** Called when the activity is first created. */

Button button;

EditText et;

TextView tv;

public DBManager dbhelper;

SQLiteDatabase sqldb;

private static final String TAG = "jamin";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

button = (Button) findViewById(R.id.button);

et = (EditText) findViewById(R.id.edittext);

tv = (TextView) findViewById(R.id.textview);

dbhelper = new DBManager(this);

dbhelper.openDatabase();

dbhelper.closeDatabase();

button.setOnClickListener(this);

sqldb = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_NAME, null);

}

public void onClick(View v) {

// TODO Auto-generated method stub

if(v == button){

Log.d(TAG, "onClick");

String searchstring = et.getText().toString();

Cursor c = sqldb.rawQuery("select city from attribution where " +"num=" +Integer.parseInt(searchstring) , null);

c.moveToFirst();

tv.setText(c.getString(c.getColumnIndex("city")));

}

}

}



这个代码还存在很多BUG,只是演示如何使用导入的数据库,把DB文件放到res/raw下,然后通过DBManager 把数据库导入data/data/里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息