Android使用已有sqlite数据库——内部存储

来源:互联网 发布:dht网络翻墙 编辑:程序博客网 时间:2024/05/28 01:35

——热爱开源,乐于分享

Android使用已有sqlite数据库——内部存储

上一篇介绍了如何在手机sd卡上使用已有的sqlite数据库,但是如果手机没有sd卡这个外部存储,则怎么实现呢?今天讲述使用Android手机内部存储使用已有的sqlite数据库。

一、拷贝数据库文件到当前工程

拷贝到res/raw下:
这里写图片描述

二、代码:

这是我在利用Android自动提示框实现的模糊匹配的项目中加入了使用内部存储读写已有sqlite数据的代码:(核心是importDatabase()这个方法

亲测可用!!!


package com.liuwan.search;import android.app.Activity;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.os.Bundle;import android.view.View;import android.widget.AutoCompleteTextView;import android.widget.LinearLayout;import com.liuwan.search.util.SearchAdapter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;public class MainActivity extends Activity implements View.OnClickListener {    private Context mcontext;    private final String DATABASE_PATH = android.os.Environment            .getExternalStorageDirectory().getAbsolutePath()            + "/dictionary";//获取sd卡路径    private final String DATABASE_FILENAME = "search.db";//数据库文件名称    private SQLiteDatabase database ;//数据库对象    private LinearLayout empty;    private AutoCompleteTextView search;    private String[] str;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mcontext=this;        database=importDatabase();        str=getData();        empty = (LinearLayout) findViewById(R.id.empty);        empty.setOnClickListener(this);        search = (AutoCompleteTextView) findViewById(R.id.search);        // 自动提示适配器//        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);        // 支持拼音检索        SearchAdapter<String> adapter = new SearchAdapter<String>(MainActivity.this,                android.R.layout.simple_list_item_1, str, SearchAdapter.ALL);        search.setAdapter(adapter);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.empty:                search.setText("");                break;        }    }    private String[] getData(){        //String[] str={"大小小","小大大","大大小"};        String sql = "select content from t_search ";        Cursor cursor = database.rawQuery(sql,null);        int i=0;        String[] str=new String[5];       /* str[0]="大小小";        str[1]="小大大";        str[2]="大大小";        str[3]="大大大小小小";        str[4]="大小大大小小";*/        int num = cursor.getCount();        cursor.moveToFirst();        for (int j=0;j<num;j++){            str[i]=cursor.getString(cursor.getColumnIndex("content"));            i++;            cursor.moveToNext();        }        cursor.close();        database.close();        return str;    }    public SQLiteDatabase importDatabase() {        // 存放数据库的目录       String dirPath = "/data/data/com.liuwan.search";       // String dirPath =mcontext.getFilesDir().getAbsolutePath();        File dir = new File(dirPath);        if (!dir.exists()) {            dir.mkdirs();        }        // 数据库文件        File file = new File(dir, "search.db");        try {            if (!file.exists()) {                try {                    file.createNewFile();                } catch (IOException e) {                    e.printStackTrace();                }            }            // 加载需要导入的数据库            InputStream is = getResources() .openRawResource(R.raw.search);            FileOutputStream fos = new FileOutputStream(file);            byte[] buffere = new byte[is.available()];            is.read(buffere);            fos.write(buffere);            is.close();            fos.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }catch (Exception e) {            e.printStackTrace();        }        // 打开/sdcard/dictionary目录中的dictionary.db文件        SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(                dirPath +"/"+ "search.db", null);        return database;    }}
原创粉丝点击