使用SQLite本地数据库

在Android平台上,集成了一个嵌入式关系型数据库sqlite。以sqlite是一款轻型数据库sqlite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。

  sqlite可以解析大部分标准sql语句。

一、设计界面

  1、布局文件

  打开res/layout/activity_main.xml文件
  输入以下代码

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:background="#EFEFEF">
  7. TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/prompt"
  11. android:textColor="@drawable/black"/>
  12. EditText
  13. android:id="@+id/editbook"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:text="作者:"
  17. android:id="@+id/editauthor"
  18. android:text="出版社:"
  19. android:id="@+id/editpublisher"
  20. ListView
  21. android:id="@+id/listview"
  22. android:background="@drawable/black"
  23. </LinearLayout>

 2、自定义列表文件

  打开res/layout/list.xml文件
  输入以下代码

copy
    android:layout_width="match_parent"
  1. android:layout_height="match_parent"CheckedTextViewandroid:id="@+id/textbookname"
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"ImageView
  4. android:id="@+id/imageView1"
  5. android:layout_width="wrap_content"
  6. android:src="@drawable/list_driver"CheckedTextViewandroid:id="@+id/textauthor"
  7. android:layout_height="wrap_content"/>
  8. ImageView
  9. android:id="@+id/imageView2"
  10. android:src="@drawable/list_driver"CheckedTextViewandroid:id="@+id/textpublisher"
  11. android:layout_height="wrap_content"   3、颜色文件

      打开res/values/color.xml文件
      输入以下代码

    copy
    resources>
  1. drawablename="black">#000000drawabledrawablename="white">#FFFFFFFFdrawablename="gray">#EFEFEF   4、字符串文件

      打开res/values/string.xml文件
      输入以下代码

    copy
    stringname="app_name">sqlitestringstringname="prompt">书名:(请使用菜单:完成新增、修改查询、刪除记录)stringname="addrec">新增stringname="editrec">修改stringname="queryrec">查询stringname="delrec">刪除 二、程序文件

      1、sqliteHelper.java文件

      打开“src/com.genwoxue.sqlite/sqliteHelper.java”文件
      然后输入以下代码

    [java] copy
    packagecom.genwoxue.sqlite;
  1. importandroid.content.ContentValues;
  2. importandroid.content.Context;
  3. importandroid.database.Cursor;
  4. importandroid.database.sqlite.sqliteDatabase;
  5. importandroid.database.sqlite.sqliteOpenHelper;
  6. publicclasssqliteHelperextendssqliteOpenHelper{
  7. privatefinalstaticStringDATABASE_NAME="Library";
  8. staticintDATABASE_VERSION=1;
  9. staticStringTABLE_NAME="Book";
  10. //构造函数,创建数据库
  11. publicsqliteHelper(Contextcontext){
  12. super(context,DATABASE_NAME,null,DATABASE_VERSION);
  13. }
  14. //建表
  15. voidonCreate(sqliteDatabasedb){
  16. Stringsql="CREATETABLE"+TABLE_NAME
  17. +"(_idINTEGERPRIMARYKEY,"
  18. +"BookNameVARCHAR(30)NOTNULL,"
  19. +"AuthorVARCHAR(20),248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> +"PublisherVARCHAR(30))";
  20. db.execsql(sql);
  21. voidonUpgrade(sqliteDatabasedb,153); background-color:inherit; font-weight:bold">intoldVersion,153); background-color:inherit; font-weight:bold">intnewVersion){
  22. Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;
  23. onCreate(db);
  24. }
  25. //获取游标
  26. publicCursorselect(){
  27. sqliteDatabasedb=this.getReadableDatabase();
  28. Cursorcursor=db.query(TABLE_NAME,null);
  29. returncursor;
  30. //插入一条记录
  31. longinsert(StringbookName,Stringauthor,Stringpublisher){
  32. sqliteDatabasedb=this.getWritableDatabase();
  33. ContentValuescv=newContentValues();
  34. cv.put("BookName",bookName);
  35. cv.put("Author",author);
  36. cv.put("Publisher",publisher);
  37. longrow=db.insert(TABLE_NAME,cv);
  38. returnrow;
  39. //根据条件查询
  40. publicCursorquery(String[]args){
  41. Cursorcursor=db.rawQuery("SELECT*FROM"+TABLE_NAME+"WHEREBookNameLIKE?",args);
  42. //删除记录
  43. voiddelete(intid){
  44. Stringwhere="_id=?";
  45. String[]whereValue={Integer.toString(id)};
  46. db.delete(TABLE_NAME,where,whereValue);
  47. //更新记录
  48. voidupdate(intid,StringbookName,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> db.update(TABLE_NAME,cv,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> }

  2、MainActivity.java文件

  打开“src/com.genwoxue.sqlite/MainActivity.java”文件
  然后输入以下代码

copy
    importandroid.app.Activity;
  1. importandroid.database.Cursor;
  2. importandroid.os.Bundle;
  3. importandroid.view.Menu;
  4. importandroid.view.MenuItem;
  5. importandroid.view.View;
  6. importandroid.widget.AdapterView;
  7. importandroid.widget.EditText;
  8. importandroid.widget.ListView;
  9. importandroid.widget.SimpleCursorAdapter;
  10. classMainActivityextendsActivity{
  11. privatesqliteHelperhelper;
  12. privateCursorcursor;
  13. privateListViewlvBook;
  14. privateEditTexteditBook;
  15. privateEditTexteditAuthor;
  16. privateEditTexteditPublisher;
  17. intid=0;
  18. protectedintMENU_ADD=Menu.FirsT;
  19. intMENU_EDIT=Menu.FirsT+1;
  20. intMENU_QUERY=Menu.FirsT+2;
  21. intMENU_DELETE=Menu.FirsT+3;
  22. //执行菜单选项
  23. booleanonoptionsItemSelected(MenuItemitem)
  24. {
  25. super.onoptionsItemSelected(item);
  26. switch(item.getItemId())
  27. {
  28. caseMENU_ADD:
  29. this.addRec();
  30. break;
  31. caseMENU_EDIT:
  32. this.editRec();
  33. break;
  34. caseMENU_QUERY:
  35. this.queryRec();
  36. caseMENU_DELETE:
  37. this.deleteRec();
  38. returntrue;
  39. //初始化菜单
  40. booleanonCreateOptionsMenu(Menumenu)
  41. super.onCreateOptionsMenu(menu);
  42. menu.add(Menu.NONE,MENU_ADD,0,R.string.addrec).setIcon(android.R.drawable.ic_menu_add);
  43. menu.add(Menu.NONE,MENU_EDIT,R.string.editrec).setIcon(android.R.drawable.ic_menu_edit);
  44. true;
  45. voidonCreate(BundlesavedInstanceState)
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.activity_main);
  48. lvBook=(ListView)this.findViewById(R.id.listview);
  49. editBook=(EditText)this.findViewById(R.id.editbook);
  50. editAuthor=(EditText)this.findViewById(R.id.editauthor);
  51. editPublisher=(EditText)this.findViewById(R.id.editpublisher);
  52. //表中内容填充到自定义ListView
  53. helper=newsqliteHelper(this);
  54. cursor=helper.select();
  55. SimpleCursorAdapteradapter=newSimpleCursorAdapter(
  56. this,
  57. R.layout.list,
  58. cursor,
  59. newString[]{"BookName","Author","Publisher"},
  60. newint[]{R.id.textbookname,R.id.textauthor,R.id.textpublisher}
  61. );
  62. lvBook.setAdapter(adapter);
  63. //lvBook设置OnItemClickListener监听事件
  64. lvBook.setonItemClickListener(newAdapterView.OnItemClickListener(){
  65. voidonItemClick(AdapterView<?>arg0,Viewarg1,153); background-color:inherit; font-weight:bold">intarg2,153); background-color:inherit; font-weight:bold">longarg3){
  66. cursor.movetoPosition(arg2);//将cursor移到所点击的值
  67. id=cursor.getInt(0);//取得字段_id的值
  68. editBook.setText(cursor.getString(1));//取得字段Rec_text的值
  69. editAuthor.setText(cursor.getString(2));
  70. editPublisher.setText(cursor.getString(3));
  71. });
  72. //添加记录
  73. voidaddRec()
  74. if(editBook.getText().toString().equals(""))
  75. return;
  76. helper.insert(editBook.getText().toString(),editAuthor.getText().toString(),editPublisher.getText().toString());
  77. //重新加载数据
  78. cursor.requery();
  79. lvBook.invalidateViews();
  80. editBook.setText("");
  81. editAuthor.setText("");
  82. editPublisher.setText("");
  83. //修改记录
  84. voideditRec()
  85. helper.update(id,editBook.getText().toString(),0); background-color:inherit">//重新加载数据
  86. cursor.requery();
  87. lvBook.invalidateViews();
  88. editBook.setText("");
  89. editAuthor.setText("");
  90. editPublisher.setText("");
  91. //根据书名查询
  92. voidqueryRec()
  93. Stringet=editBook.getText().toString();
  94. Stringargs[]=newString[]{"%"+et+"%"};
  95. cursor=helper.query(args);
  96. SimpleCursorAdapteradapter=newSimpleCursorAdapter(
  97. R.layout.list,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> cursor,R.id.textpublisher}
  98. );
  99. lvBook.setAdapter(adapter);
  100. voiddeleteRec()
  101. helper.delete(id);
  102. 三、配置文件

      打开“AndroidManifest.xml”文件
      然后输入以下代码

    copy
      manifestxmlns:android="http://schemas.android.com/apk/res/android"
    1. package="com.genwoxue.sqlite"
    2. android:versionCode="1"
    3. android:versionName="1.0"uses-sdk
    4. android:minSdkVersion="8"
    5. android:targetSdkVersion="15"application
    6. android:allowBackup="true"
    7. android:icon="@drawable/ic_launcher"
    8. android:label="@string/app_name"
    9. android:theme="@style/AppTheme"activity
    10. android:name="com.genwoxue.sqlite.MainActivity"
    11. spanstyle="color:#ff0000;">strong>android:theme="@android:style/Theme">spanintent-filteractionandroid:name="android.intent.action.MAIN"categoryandroid:name="android.intent.category.LAUNCHER"activityapplicationmanifest   注意:在Android4.0中,如果想显示2.3版本中样式的菜单,需要在配置文件中填加以上红色代码

      四、运行结果

         

        说明:输入内容,单击“新增”菜单,则添加一条记录;也可以根据书名查询相应书籍;也可以选中某条记录,然后单击“修改”或“删除菜单

        

      附:

      (一)如何删除sqlite数据库

        常有人问:如何删除自己创建的数据库

        在Activity中,提供有现成的方法:public boolean deleteDatabase (String name)

      (二)SimpleCursorAdapter简要说明

        描述:

        SimpleCurosrAdapter 是一个将 Cursor 中的 columns 与在 XML 文件中定义的 TextViews 或 ImageViews 进行匹配的简易 adapter。你可以指定选择 Cursor 中的哪些 columns、用哪些 views 来显示这些 columns 、以及指定定义这些 views 的 xml 文件

      也就是说,SimpleCursorAdapter 允许绑定一个 Cursor 的 columns 到 ListView 上,并使用自定义的 layout 显示 List中的每个项目。

      可以使用 SimpleCursorAdapter 作为中间桥梁,将从 sqlite 数据库查询出来的数据直接显示到 ListView 中。

        原型:

        public SimpleCursorAdapter(Context context,int layout,Cursor c,String[] from,int[] to) {

           super(context,layout,c);
           mTo = to;
           mOriginalFrom = from;
           findColumns(from);
        }

        参数:

        Context context,这个与 SimpleListItemFactory 相关的 ListView 所处运行上下文(context)。也就是这个 ListView 所在的 Activity。

        int layout,显示 list item 的 布局文件。这个 layout 文件中至少要包含在 "to" 参数中命名的 views。

        Cursor c,数据库的光标( Cursor )。如果 cursor 无效,则该参数可以为 null

        String[] from,指定 column 中的哪些列的数据将绑定(显示)到 UI 中。如果 cursor 无效, 则该参数可为 null。

        int[] to,指定用于显示 "from" 参数指定的数据列表的 views。 这些 views 必须都是 TextViews。 "from" 参数的前 N 个值(valus)和 "to" 参数的前 N 个 views 是一一对应的关系。如果 cursor 无效,则该参数可为 null。

      相关文章

      SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
      使用Python操作内置数据库SQLite以及MySQL数据库。
      破解微信数据库密码,用python导出微信聊天记录
      (Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
      安卓开发,利用SQLite实现登陆注册功能