android直接读取项目中的sqlite数据库

本文介绍如何在Android应用中利用SQLite数据库进行基本操作,并以英汉字典为例,展示如何通过输入英文查询其对应的汉语解释。通过在设备启动时安装数据库到内存卡上,确保了应用能够高效地读取和查询数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子。主要是输入英语到数据库中查询相应的汉语意思,将其答案输出。数据库采用sqlite3.

如图:

image

实现过程完全是按照参考文章中所述。其中要说明的是,程序在第一次启动的时候,会把数据库安装到内存卡上面,从而可以读却数据库。

相关的代码:

Java代码 收藏代码
  1. packagecom.easymorse;
  2. importjava.io.File;
  3. importjava.io.FileOutputStream;
  4. importjava.io.InputStream;
  5. importandroid.app.Activity;
  6. importandroid.app.AlertDialog;
  7. importandroid.database.Cursor;
  8. importandroid.database.sqlite.SQLiteDatabase;
  9. importandroid.os.Bundle;
  10. importandroid.text.Editable;
  11. importandroid.text.TextWatcher;
  12. importandroid.util.Log;
  13. importandroid.view.View;
  14. importandroid.view.View.OnClickListener;
  15. importandroid.widget.AutoCompleteTextView;
  16. importandroid.widget.Button;
  17. publicclassDictionaryextendsActivityimplementsOnClickListener,TextWatcher{
  18. privatefinalStringDATABASE_PATH=android.os.Environment
  19. .getExternalStorageDirectory().getAbsolutePath()
  20. +"/dictionary";
  21. privatefinalStringDATABASE_FILENAME="dictionary.db3";
  22. SQLiteDatabasedatabase;
  23. ButtonbtnSelectWord;
  24. AutoCompleteTextViewactvWord;
  25. @Override
  26. publicvoidonCreate(BundlesavedInstanceState){
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.main);
  29. //打开数据库,database是在Main类中定义的一个SQLiteDatabase类型的变量
  30. database=openDatabase();
  31. //下面的代码装载了相关组件,并设置了相应的事件
  32. btnSelectWord=(Button)findViewById(R.id.btnSelectWord);
  33. actvWord=(AutoCompleteTextView)findViewById(R.id.actvWord);
  34. btnSelectWord.setOnClickListener(this);
  35. actvWord.addTextChangedListener(this);
  36. }
  37. publicvoidonClick(Viewview)
  38. {
  39. //查找单词的SQL语句
  40. Stringsql="selectchinesefromt_wordswhereenglish=?";
  41. Cursorcursor=database.rawQuery(sql,newString[]
  42. {actvWord.getText().toString()});
  43. Stringresult="未找到该单词.";
  44. //如果查找单词,显示其中文信息
  45. if(cursor.getCount()>0)
  46. {
  47. //必须使用moveToFirst方法将记录指针移动到第1条记录的位置
  48. cursor.moveToFirst();
  49. result=cursor.getString(cursor.getColumnIndex("chinese"));
  50. Log.i("tran","success"+result);
  51. }
  52. //显示查询结果对话框
  53. newAlertDialog.Builder(this).setTitle("查询结果").setMessage(result)
  54. .setPositiveButton("关闭",null).show();
  55. }
  56. privateSQLiteDatabaseopenDatabase(){
  57. try{
  58. //获得dictionary.db文件的绝对路径
  59. StringdatabaseFilename=DATABASE_PATH+"/"+DATABASE_FILENAME;
  60. Filedir=newFile(DATABASE_PATH);
  61. //如果/sdcard/dictionary目录中存在,创建这个目录
  62. if(!dir.exists())
  63. dir.mkdir();
  64. //如果在/sdcard/dictionary目录中不存在
  65. //dictionary.db文件,则从res\raw目录中复制这个文件到
  66. //SD卡的目录(/sdcard/dictionary)
  67. if(!(newFile(databaseFilename)).exists()){
  68. //获得封装dictionary.db文件的InputStream对象
  69. InputStreamis=getResources().openRawResource(
  70. R.raw.dictionary);
  71. FileOutputStreamfos=newFileOutputStream(databaseFilename);
  72. byte[]buffer=newbyte[8192];
  73. intcount=0;
  74. //开始复制dictionary.db文件
  75. while((count=is.read(buffer))>0){
  76. fos.write(buffer,0,count);
  77. }
  78. fos.close();
  79. is.close();
  80. }
  81. //打开/sdcard/dictionary目录中的dictionary.db文件
  82. SQLiteDatabasedatabase=SQLiteDatabase.openOrCreateDatabase(
  83. databaseFilename,null);
  84. returndatabase;
  85. }catch(Exceptione){
  86. }
  87. returnnull;
  88. }
  89. @Override
  90. publicvoidafterTextChanged(Editables){
  91. }
  92. @Override
  93. publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
  94. intafter){
  95. }
  96. @Override
  97. publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
  98. }
  99. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值