在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文件。
  输入以下代码:

Text Print
  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:textColor="@drawable/black"/>
  17. <TextView
  18. android:layout_width="fill_parent"
  19. android:layout_height="wrap_content"
  20. android:text="作者:"
  21. android:textColor="@drawable/black"/>
  22. <EditText
  23. android:id="@+id/editauthor"
  24. android:layout_width="fill_parent"
  25. android:layout_height="wrap_content"
  26. android:textColor="@drawable/black"/>
  27. <TextView
  28. android:layout_width="fill_parent"
  29. android:layout_height="wrap_content"
  30. android:text="出版社:"
  31. android:textColor="@drawable/black"/>
  32. <EditText
  33. android:id="@+id/editpublisher"
  34. android:layout_width="fill_parent"
  35. android:layout_height="wrap_content"
  36. android:textColor="@drawable/black"/>
  37. <ListView
  38. android:id="@+id/listview"
  39. android:layout_width="fill_parent"
  40. android:layout_height="wrap_content"
  41. android:background="@drawable/black"/>
  42. </LinearLayout>

 2、自定义列表文件

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

Text Print
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <CheckedTextViewandroid:id="@+id/textbookname"
  6. android:layout_width="wrap_content"
  7. android:layout_height="wrap_content"/>
  8. <ImageView
  9. android:id="@+id/imageView1"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:src="@drawable/list_driver"/>
  13. <CheckedTextViewandroid:id="@+id/textauthor"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"/>
  16. <ImageView
  17. android:id="@+id/imageView2"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:src="@drawable/list_driver"/>
  21. <CheckedTextViewandroid:id="@+id/textpublisher"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"/>
  24. </LinearLayout>

  3、颜色文件

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

Text Print
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <drawablename="black">#000000</drawable>
  4. <drawablename="white">#FFFFFFFF</drawable>
  5. <drawablename="gray">#EFEFEF</drawable>
  6. </resources>

  4、字符串文件

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

Text Print
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="app_name">SQLite</string>
  4. <stringname="prompt">书名:(请使用菜单:完成新增、修改、查询、刪除记录)</string>
  5. <stringname="addrec">新增</string>
  6. <stringname="editrec">修改</string>
  7. <stringname="queryrec">查询</string>
  8. <stringname="delrec">刪除</string>
  9. </resources>

二、程序文件

  1、SQLiteHelper.java文件

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

Text Print
  1. packagecom.genwoxue.sqlite;
  2. importandroid.content.ContentValues;
  3. importandroid.content.Context;
  4. importandroid.database.Cursor;
  5. importandroid.database.sqlite.SQLiteDatabase;
  6. importandroid.database.sqlite.SQLiteOpenHelper;
  7. publicclassSQLiteHelperextendsSQLiteOpenHelper{
  8. privatefinalstaticStringDATABASE_NAME="Library";
  9. privatefinalstaticintDATABASE_VERSION=1;
  10. privatefinalstaticStringTABLE_NAME="Book";
  11. //构造函数,创建数据库
  12. publicSQLiteHelper(Contextcontext){
  13. super(context,DATABASE_NAME,null,DATABASE_VERSION);
  14. }
  15. //建表
  16. publicvoidonCreate(SQLiteDatabasedb){
  17. Stringsql="CREATETABLE"+TABLE_NAME
  18. +"(_idINTEGERPRIMARYKEY,"
  19. +"BookNameVARCHAR(30)NOTNULL,"
  20. +"AuthorVARCHAR(20),"
  21. +"PublisherVARCHAR(30))";
  22. db.execSQL(sql);
  23. }
  24. publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
  25. Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;
  26. db.execSQL(sql);
  27. onCreate(db);
  28. }
  29. //获取游标
  30. publicCursorselect(){
  31. SQLiteDatabasedb=this.getReadableDatabase();
  32. Cursorcursor=db.query(TABLE_NAME,null,null,null,null,null,null);
  33. returncursor;
  34. }
  35. //插入一条记录
  36. publiclonginsert(StringbookName,Stringauthor,Stringpublisher){
  37. SQLiteDatabasedb=this.getWritableDatabase();
  38. ContentValuescv=newContentValues();
  39. cv.put("BookName",bookName);
  40. cv.put("Author",author);
  41. cv.put("Publisher",publisher);
  42. longrow=db.insert(TABLE_NAME,null,cv);
  43. returnrow;
  44. }
  45. //根据条件查询
  46. publicCursorquery(String[]args){
  47. SQLiteDatabasedb=this.getReadableDatabase();
  48. Cursorcursor=db.rawQuery("SELECT*FROM"+TABLE_NAME+"WHEREBookNameLIKE?",args);
  49. returncursor;
  50. }
  51. //删除记录
  52. publicvoiddelete(intid){
  53. SQLiteDatabasedb=this.getWritableDatabase();
  54. Stringwhere="_id=?";
  55. String[]whereValue={Integer.toString(id)};
  56. db.delete(TABLE_NAME,where,whereValue);
  57. }
  58. //更新记录
  59. publicvoidupdate(intid,StringbookName,Stringauthor,Stringpublisher){
  60. SQLiteDatabasedb=this.getWritableDatabase();
  61. Stringwhere="_id=?";
  62. String[]whereValue={Integer.toString(id)};
  63. ContentValuescv=newContentValues();
  64. cv.put("BookName",bookName);
  65. cv.put("Author",author);
  66. cv.put("Publisher",publisher);
  67. db.update(TABLE_NAME,cv,where,whereValue);
  68. }
  69. }

  2、MainActivity.java文件

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

Text Print
  1. packagecom.genwoxue.sqlite;
  2. importandroid.app.Activity;
  3. importandroid.database.Cursor;
  4. importandroid.os.Bundle;
  5. importandroid.view.Menu;
  6. importandroid.view.MenuItem;
  7. importandroid.view.View;
  8. importandroid.widget.AdapterView;
  9. importandroid.widget.EditText;
  10. importandroid.widget.ListView;
  11. importandroid.widget.SimpleCursorAdapter;
  12. publicclassMainActivityextendsActivity{
  13. privateSQLiteHelperhelper;
  14. privateCursorcursor;
  15. privateListViewlvBook;
  16. privateEditTexteditBook;
  17. privateEditTexteditAuthor;
  18. privateEditTexteditPublisher;
  19. privateintid=0;
  20. protectedfinalstaticintMENU_ADD=Menu.FIRST;
  21. protectedfinalstaticintMENU_EDIT=Menu.FIRST+1;
  22. protectedfinalstaticintMENU_QUERY=Menu.FIRST+2;
  23. protectedfinalstaticintMENU_DELETE=Menu.FIRST+3;
  24. //执行菜单选项
  25. publicbooleanonOptionsItemSelected(MenuItemitem)
  26. {
  27. super.onOptionsItemSelected(item);
  28. switch(item.getItemId())
  29. {
  30. caseMENU_ADD:
  31. this.addRec();
  32. break;
  33. caseMENU_EDIT:
  34. this.editRec();
  35. break;
  36. caseMENU_QUERY:
  37. this.queryRec();
  38. break;
  39. caseMENU_DELETE:
  40. this.deleteRec();
  41. break;
  42. }
  43. returntrue;
  44. }
  45. //初始化菜单
  46. publicbooleanonCreateOptionsMenu(Menumenu)
  47. {
  48. super.onCreateOptionsMenu(menu);
  49. menu.add(Menu.NONE,MENU_ADD,0,R.string.addrec).setIcon(android.R.drawable.ic_menu_add);
  50. menu.add(Menu.NONE,MENU_EDIT,0,R.string.editrec).setIcon(android.R.drawable.ic_menu_edit);
  51. menu.add(Menu.NONE,MENU_QUERY,0,R.string.queryrec).setIcon(android.R.drawable.ic_menu_search);
  52. menu.add(Menu.NONE,MENU_DELETE,0,R.string.delrec).setIcon(android.R.drawable.ic_menu_delete);
  53. returntrue;
  54. }
  55. publicvoidonCreate(BundlesavedInstanceState)
  56. {
  57. super.onCreate(savedInstanceState);
  58. setContentView(R.layout.activity_main);
  59. lvBook=(ListView)this.findViewById(R.id.listview);
  60. editBook=(EditText)this.findViewById(R.id.editbook);
  61. editAuthor=(EditText)this.findViewById(R.id.editauthor);
  62. editPublisher=(EditText)this.findViewById(R.id.editpublisher);
  63. //表中内容填充到自定义ListView
  64. helper=newSQLiteHelper(this);
  65. cursor=helper.select();
  66. SimpleCursorAdapteradapter=newSimpleCursorAdapter(
  67. this,
  68. R.layout.list,
  69. cursor,
  70. newString[]{"BookName","Author","Publisher"},
  71. newint[]{R.id.textbookname,R.id.textauthor,R.id.textpublisher}
  72. );
  73. lvBook.setAdapter(adapter);
  74. //lvBook设置OnItemClickListener监听事件
  75. lvBook.setOnItemClickListener(newAdapterView.OnItemClickListener(){
  76. publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){
  77. cursor.moveToPosition(arg2);//将cursor移到所点击的值
  78. id=cursor.getInt(0);//取得字段_id的值
  79. editBook.setText(cursor.getString(1));//取得字段Rec_text的值
  80. editAuthor.setText(cursor.getString(2));
  81. editPublisher.setText(cursor.getString(3));
  82. }
  83. });
  84. }
  85. //添加记录
  86. privatevoidaddRec()
  87. {
  88. if(editBook.getText().toString().equals(""))
  89. return;
  90. helper.insert(editBook.getText().toString(),editAuthor.getText().toString(),editPublisher.getText().toString());
  91. //重新加载数据
  92. cursor.requery();
  93. lvBook.invalidateViews();
  94. editBook.setText("");
  95. editAuthor.setText("");
  96. editPublisher.setText("");
  97. }
  98. //修改记录
  99. privatevoideditRec()
  100. {
  101. if(editBook.getText().toString().equals(""))
  102. return;
  103. helper.update(id,editBook.getText().toString(),editAuthor.getText().toString(),editPublisher.getText().toString());
  104. //重新加载数据
  105. cursor.requery();
  106. lvBook.invalidateViews();
  107. editBook.setText("");
  108. editAuthor.setText("");
  109. editPublisher.setText("");
  110. }
  111. //根据书名查询
  112. privatevoidqueryRec()
  113. {
  114. Stringet=editBook.getText().toString();
  115. Stringargs[]=newString[]{"%"+et+"%"};
  116. cursor=helper.query(args);
  117. SimpleCursorAdapteradapter=newSimpleCursorAdapter(
  118. this,
  119. R.layout.list,
  120. cursor,
  121. newString[]{"BookName","Author","Publisher"},
  122. newint[]{R.id.textbookname,R.id.textauthor,R.id.textpublisher}
  123. );
  124. lvBook.setAdapter(adapter);
  125. }
  126. //删除记录
  127. privatevoiddeleteRec()
  128. {
  129. helper.delete(id);
  130. cursor.requery();
  131. lvBook.invalidateViews();
  132. editBook.setText("");
  133. }
  134. }

三、配置文件

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

Text Print
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.genwoxue.sqlite"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="15"/>
  9. <application
  10. android:allowBackup="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:theme="@style/AppTheme">
  14. <activity
  15. android:name="com.genwoxue.sqlite.MainActivity"
  16. android:label="@string/app_name"
  17. android:theme="@android:style/Theme">
  18. <intent-filter>
  19. <actionandroid:name="android.intent.action.MAIN"/>
  20. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  21. </intent-filter>
  22. </activity>
  23. </application>
  24. </manifest>

  注意:在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。

更多相关文章

  1. 基于 Android(安卓)NDK 进行 OpenGL ES开发
  2. Android第一步
  3. Android(安卓)简单项目
  4. 开发人员应该了解的 Android(安卓)常用术语
  5. Fragment的添加方法总结
  6. android 项目工程文件夹(zhuan)
  7. Android(安卓)Init进程源码分析
  8. Android(安卓)如何在代码中动态的添加View 及 指定位置
  9. 离线下载android sdk

随机推荐

  1. Mac下编译x264 for Android
  2. 细说PHP的变量与常量
  3. OpenGL ES2.0实现手指滑动平移、双指缩放
  4. Android(安卓)解决静态广播收不到的问题
  5. Android中的动画--笔记
  6. Android中如何清除缓存
  7. Android获得位置信息(GPS+wifi/基站)
  8. Android获取手机和系统版本等信息的代码
  9. android Retrofit+OKhttp实现接口调用
  10. MediaRouter的使用