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

如图:

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

相关的代码:

  1. package com.easymorse;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import android.app.Activity;
  6. import android.app.AlertDialog;
  7. import android.database.Cursor;
  8. import android.database.sqlite.SQLiteDatabase;
  9. import android.os.Bundle;
  10. import android.text.Editable;
  11. import android.text.TextWatcher;
  12. import android.util.Log;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.widget.AutoCompleteTextView;
  16. import android.widget.Button;
  17. public class Dictionary extends Activity  implements OnClickListener, TextWatcher{
  18. private final String DATABASE_PATH = android.os.Environment
  19. .getExternalStorageDirectory().getAbsolutePath()
  20. + "/dictionary";
  21. private final String DATABASE_FILENAME = "dictionary.db3";
  22. SQLiteDatabase database;
  23. Button btnSelectWord;
  24. AutoCompleteTextView actvWord;
  25. @Override
  26. public void onCreate(Bundle savedInstanceState) {
  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. public void onClick(View view)
  38. {
  39. //  查找单词的SQL语句
  40. String sql = "select chinese from t_words where english=?";
  41. Cursor cursor = database.rawQuery(sql, new String[]
  42. { actvWord.getText().toString() });
  43. String result = "未找到该单词.";
  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. new AlertDialog.Builder(this).setTitle("查询结果").setMessage(result)
  54. .setPositiveButton("关闭", null).show();
  55. }
  56. private SQLiteDatabase openDatabase() {
  57. try {
  58. // 获得dictionary.db文件的绝对路径
  59. String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
  60. File dir = new File(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 (!(new File(databaseFilename)).exists()) {
  68. // 获得封装dictionary.db文件的InputStream对象
  69. InputStream is = getResources().openRawResource(
  70. R.raw.dictionary);
  71. FileOutputStream fos = new FileOutputStream(databaseFilename);
  72. byte[] buffer = new byte[8192];
  73. int count = 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. SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
  83. databaseFilename, null);
  84. return database;
  85. } catch (Exception e) {
  86. }
  87. return null;
  88. }
  89. @Override
  90. public void afterTextChanged(Editable s) {
  91. }
  92. @Override
  93. public void beforeTextChanged(CharSequence s, int start, int count,
  94. int after) {
  95. }
  96. @Override
  97. public void onTextChanged(CharSequence s, int start, int before, int count) {
  98. }
  99. }

android直接读取项目中的sqlite数据库的更多相关文章

  1. 在项目中使用SQLite数据库小结

    ------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...

  2. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  3. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  4. 在Android 开发中使用 SQLite 数据库笔记

    SQLite 介绍   SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PH ...

  5. Android虚拟机中的sqlite数据库文件

    Android虚拟机中的sqlite数据库文件 ①

  6. Android+Jquery Mobile学习系列(5)-SQLite数据库

    SQLite是轻量级的.嵌入式的.关系型数据库,目前已经在iPhone.Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠. 因为Android已经集成了SQLit ...

  7. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  8. 在Xamarin.iOS项目中使用预设数据库

    在Xamarin.iOS项目中使用预设数据库 当开发者准备好一个预设数据库文件后,就可以将这个数据库文件添加到创建的项目中了.本节将分别在Xamarin.iOS和Xamarin.Android项目中使 ...

  9. Go语言中使用SQLite数据库

    Go语言中使用SQLite数据库 1.驱动 Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的 https://github.com/mattn/go-sqlite3 ...

随机推荐

  1. 【BZOJ】【1923】【Sdoi2010】外星千足虫

    高斯消元解Xor方程组 ZYF Orz 这题……不作死就不会死T^T,用bitset确实比较快,而且可以从string直接转成bitset(构造函数). 但问题是我把转过来以后的顺序搞反了……原本以为 ...

  2. maven中net.sf.json报错的解决方法

    今天在用maven添加net.sf.json的jar包的时候,代码如下: <dependency> <groupId>net.sf.json-lib</groupId&g ...

  3. OpenCV学习(37) 人脸识别(2)

          在前面一篇教程中,我们学习了OpenCV中基于特征脸的人脸识别的代码实现,我们通过代码 Ptr<FaceRecognizer> model = createEigenFaceR ...

  4. C# 开发者代码审查清单

    这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考.这是为了确保在编码过程中,大部分通用编码指导原则都能注意到.对于新手和缺乏经验(0到3年工作经验)的开发者,参考这份清单编码会很帮助 ...

  5. Web开发者不容错过的10段CSS代码

    Web开发技术每年都在革新,浏览器已逐渐支持CSS3特性,并且网站设计师和前端开发者普遍采用这种新技术进行设计与开发.但仍然有一些开发者迷恋着一些CSS2代码. 本文将分享20段非常专业的CSS2/C ...

  6. Android 如何去掉手机中横竖屏切换时的转屏动画?

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  7. spring boot测试工具(自带)

    启动spring boot 项目(一般是openapi) http://localhost:8888/swagger-ui.html 端口号可以自己配

  8. 【python】如何去掉使用BeautifulSoup读取html出现的警告UserWarning: You provided Unicode markup but also provided a value for from_encoding

    如果我们这样读取html页面 soup= BeautifulSoup(rsp.text,'html.parser',from_encoding='utf-8')  # 粗体部分多余了 就会出现下面的警 ...

  9. #lspci | grep Eth

    该命令作用:将lspci的输出当做输入,从中找出包含Eth的行.在我的Fedora机器上运行结果为 [root@localhost etc]# lspci | grep Eth00:04.0 Ethe ...

  10. (LeetCode 86)Partition List

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...