zoukankan      html  css  js  c++  java
  • android直接读取项目中的sqlite数据库

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

      如图:

      image

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

    相关的代码:

    Java代码  收藏代码
    1. package com.easymorse;  
    2.   
    3. import java.io.File;   
    4. import java.io.FileOutputStream;   
    5. import java.io.InputStream;  
    6.   
    7. import android.app.Activity;   
    8. import android.app.AlertDialog;   
    9. import android.database.Cursor;   
    10. import android.database.sqlite.SQLiteDatabase;   
    11. import android.os.Bundle;   
    12. import android.text.Editable;   
    13. import android.text.TextWatcher;   
    14. import android.util.Log;   
    15. import android.view.View;   
    16. import android.view.View.OnClickListener;   
    17. import android.widget.AutoCompleteTextView;   
    18. import android.widget.Button;  
    19.   
    20. public class Dictionary extends Activity  implements OnClickListener, TextWatcher{   
    21.     private final String DATABASE_PATH = android.os.Environment   
    22.             .getExternalStorageDirectory().getAbsolutePath()   
    23.             + "/dictionary";   
    24.     private final String DATABASE_FILENAME = "dictionary.db3";   
    25.     SQLiteDatabase database;   
    26.     Button btnSelectWord;   
    27.     AutoCompleteTextView actvWord;   
    28.     @Override   
    29.     public void onCreate(Bundle savedInstanceState) {   
    30.         super.onCreate(savedInstanceState);   
    31.         setContentView(R.layout.main);   
    32.         // 打开数据库,database是在Main类中定义的一个SQLiteDatabase类型的变量   
    33.         database = openDatabase();   
    34.         // 下面的代码装载了相关组件,并设置了相应的事件   
    35.         btnSelectWord = (Button) findViewById(R.id.btnSelectWord);   
    36.         actvWord = (AutoCompleteTextView) findViewById(R.id.actvWord);   
    37.         btnSelectWord.setOnClickListener(this);   
    38.         actvWord.addTextChangedListener(this);   
    39.     }   
    40.     public void onClick(View view)   
    41.     {   
    42.         //  查找单词的SQL语句   
    43.         String sql = "select chinese from t_words where english=?";      
    44.         Cursor cursor = database.rawQuery(sql, new String[]   
    45.         { actvWord.getText().toString() });   
    46.         String result = "未找到该单词.";   
    47.         //  如果查找单词,显示其中文信息   
    48.         if (cursor.getCount() > 0)   
    49.         {   
    50.             //  必须使用moveToFirst方法将记录指针移动到第1条记录的位置   
    51.             cursor.moveToFirst();   
    52.             result = cursor.getString(cursor.getColumnIndex("chinese"));   
    53.             Log.i("tran", "success"+result);   
    54.         }   
    55.         //  显示查询结果对话框   
    56.         new AlertDialog.Builder(this).setTitle("查询结果").setMessage(result)   
    57.                 .setPositiveButton("关闭", null).show();  
    58.   
    59.     }  
    60.   
    61.     private SQLiteDatabase openDatabase() {   
    62.         try {   
    63.             // 获得dictionary.db文件的绝对路径   
    64.             String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;   
    65.             File dir = new File(DATABASE_PATH);   
    66.             // 如果/sdcard/dictionary目录中存在,创建这个目录   
    67.             if (!dir.exists())   
    68.                 dir.mkdir();   
    69.             // 如果在/sdcard/dictionary目录中不存在   
    70.             // dictionary.db文件,则从res aw目录中复制这个文件到   
    71.             // SD卡的目录(/sdcard/dictionary)   
    72.             if (!(new File(databaseFilename)).exists()) {   
    73.                 // 获得封装dictionary.db文件的InputStream对象   
    74.                 InputStream is = getResources().openRawResource(   
    75.                         R.raw.dictionary);   
    76.                 FileOutputStream fos = new FileOutputStream(databaseFilename);   
    77.                 byte[] buffer = new byte[8192];   
    78.                 int count = 0;   
    79.                 // 开始复制dictionary.db文件   
    80.                 while ((count = is.read(buffer)) > 0) {   
    81.                     fos.write(buffer, 0, count);   
    82.                 }  
    83.   
    84.                 fos.close();   
    85.                 is.close();   
    86.             }   
    87.             // 打开/sdcard/dictionary目录中的dictionary.db文件   
    88.             SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(   
    89.                     databaseFilename, null);   
    90.             return database;   
    91.         } catch (Exception e) {   
    92.         }   
    93.         return null;   
    94.     }   
    95.     @Override   
    96.     public void afterTextChanged(Editable s) {   
    97.     }   
    98.     @Override   
    99.     public void beforeTextChanged(CharSequence s, int start, int count,   
    100.             int after) {   
    101.     }   
    102.     @Override   
    103.     public void onTextChanged(CharSequence s, int start, int before, int count) {   
    104.     }  
    105.   
    106. }  
  • 相关阅读:
    Java数据结构与算法(24)
    urllib2使用总结
    Python常见文件操作的函数示例
    Java数据结构与算法(23)
    python代码风格检查工具──pylint
    Python抓取框架:Scrapy的架构
    Java数据结构与算法(22)
    【codeforces 431D】Random Task
    【codeforces 449C】Jzzhu and Apples
    【codeforces 20B】Equation
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/4155313.html
Copyright © 2011-2022 走看看