加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用SQLite本地数据库

发布时间:2020-12-12 19:44:28 所属栏目:百科 来源:网络整理
导读:在Android平台上,集成了一个嵌入式关系型数据库—SQLite。以SQLite是一款轻型数据库:SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、d

在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。

            (编辑:李大同)

            【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读