zoukankan      html  css  js  c++  java
  • 使用安卓读取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. }  
  • 相关阅读:
    对象池使用时要注意几点
    Flash3D学习计划(一)——3D渲染的一般管线流程
    714. Best Time to Buy and Sell Stock with Transaction Fee
    712. Minimum ASCII Delete Sum for Two Strings
    647. Palindromic Substrings(马拉车算法)
    413. Arithmetic Slices
    877. Stone Game
    338. Counting Bits
    303. Range Sum Query
    198. House Robber
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3875793.html
Copyright © 2011-2022 走看看