将已有的词典数据库文件,用到项目中
谷歌搜索“android existing sqlite database”
http://stackoverflow.com/questions/1951805/how-to-access-an-existing-sqlite-database-in-android
通常来说,
SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null, 0);
就可以。
但是,如果 数据库文件在 assets 目录下,该如何做呢?
http://stackoverflow.com/questions/513084/how-to-ship-an-android-application-with-a-database
哈,用第三方库:
https://github.com/jgilfelt/android-sqlite-asset-helper
OK直接看项目吧:
数据库文件:
运行效果图:
代码:
package com.jiangge.dictmini; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private EditText mEditText; //输入框 private TextView mReslutView; //显示查询结果 private Cursor resultCursor; private MyDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText) findViewById(R.id.et_words); mReslutView = (TextView) findViewById(R.id.tv_result); } //搜索按钮响应事件,方法在 xml 文件中定义 android:onClick="search" public void search(View view){ String inputValue = mEditText.getText().toString().trim(); if (TextUtils.isEmpty(inputValue)) { mReslutView.setText("查询内容不能为空"); return; } db = new MyDatabase(MainActivity.this); resultCursor = db.getResultFromDB(inputValue); if (resultCursor != null && resultCursor.getCount() > 0) { resultCursor.moveToFirst(); String value = resultCursor.getString(resultCursor.getColumnIndex("chinese" )); mReslutView.setText(value); }else { mReslutView.setText("查询结果不存在"); } } }
File: MyDatabase.java 根据第三方库修改而成
package com.jiangge.dictmini; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; public class MyDatabase extends SQLiteAssetHelper { private static final String DATABASE_NAME = "dictionary"; private static final int DATABASE_VERSION = 1; public MyDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // you can use an alternate constructor to specify a database location // (such as a folder on the sd card) // you must ensure that this folder is available and you have permission // to write to it //super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION); } public Cursor getResultFromDB(String value) { SQLiteDatabase db = getReadableDatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); String [] sqlSelect = {"english", "chinese"}; String sqlTables = "t_words"; //select * from t_words where english = 'love' qb.setTables(sqlTables); Cursor cursor = qb.query(db, sqlSelect, "english=?", new String[]{value}, null, null, null); cursor.moveToFirst(); return cursor; } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" ><Button android:id="@+id/btn_search" android:onClick="search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@+id/et_words" android:text="查询" /><EditText android:id="@+id/et_words" android:hint="请输入要查询的单词" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="0dp" android:layout_toLeftOf="@+id/btn_search" android:ems="10" /><TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/et_words" android:layout_below="@+id/et_words" android:text="显示结果" /><TextView android:id="@+id/tv_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/tv_desc" android:layout_below="@+id/tv_desc" android:layout_marginTop="18dp" android:textAppearance="?android:attr/textAppearanceMedium" /></RelativeLayout>
作者:xiaowanggedege 发表于2013-11-30 23:11:28 原文链接
阅读:107 评论:0 查看评论