\\

转载自:http://blog.csdn.net/android_tutor/article/details/5654124

大家好,好久没有更新博客了,最近由于身体不适让大家久等了,好了,直接进入主题~

Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences存储;第三种就是数据库SQLiteDatabase存储。

文件存储我就不用多说了,而SharedPreferences可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列。Android高手进阶教程(七)之----Android 中Preferences的使用!

今天我们将讲一下SQLiteDatabase的使用而掌握SqliteDatabase,将会我们接下来掌握ContentProvider打下良好的基石

为了让大家更好的掌握,我们手把手完成该节的Demo

第一步:新建一个Android工程,命名为SQLiteDatabaseDemo.

第二步:创建一个新的类BooksDB.java这个类要继承于android.database.sqlite.SQLiteOpenHelper抽象类,我们要实现其中两个方法:onCreate(),onUpdate.具体代码如下:

[java] view plain copy
  1. packagecom.android.tutor;
  2. importandroid.content.ContentValues;
  3. importandroid.content.Context;
  4. importandroid.database.Cursor;
  5. importandroid.database.sqlite.SQLiteDatabase;
  6. importandroid.database.sqlite.SQLiteOpenHelper;
  7. publicclassBooksDBextendsSQLiteOpenHelper{
  8. privatefinalstaticStringDATABASE_NAME="BOOKS.db";
  9. privatefinalstaticintDATABASE_VERSION=1;
  10. privatefinalstaticStringTABLE_NAME="books_table";
  11. publicfinalstaticStringBOOK_ID="book_id";
  12. publicfinalstaticStringBOOK_NAME="book_name";
  13. publicfinalstaticStringBOOK_AUTHOR="book_author";
  14. publicBooksDB(Contextcontext){
  15. //TODOAuto-generatedconstructorstub
  16. super(context,DATABASE_NAME,null,DATABASE_VERSION);
  17. }
  18. //创建table
  19. @Override
  20. publicvoidonCreate(SQLiteDatabasedb){
  21. Stringsql="CREATETABLE"+TABLE_NAME+"("+BOOK_ID
  22. +"INTEGERprimarykeyautoincrement,"+BOOK_NAME+"text,"+BOOK_AUTHOR+"text);";
  23. db.execSQL(sql);
  24. }
  25. @Override
  26. publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
  27. Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;
  28. db.execSQL(sql);
  29. onCreate(db);
  30. }
  31. publicCursorselect(){
  32. SQLiteDatabasedb=this.getReadableDatabase();
  33. Cursorcursor=db
  34. .query(TABLE_NAME,null,null,null,null,null,null);
  35. returncursor;
  36. }
  37. //增加操作
  38. publiclonginsert(Stringbookname,Stringauthor)
  39. {
  40. SQLiteDatabasedb=this.getWritableDatabase();
  41. /*ContentValues*/
  42. ContentValuescv=newContentValues();
  43. cv.put(BOOK_NAME,bookname);
  44. cv.put(BOOK_AUTHOR,author);
  45. longrow=db.insert(TABLE_NAME,null,cv);
  46. returnrow;
  47. }
  48. //删除操作
  49. publicvoiddelete(intid)
  50. {
  51. SQLiteDatabasedb=this.getWritableDatabase();
  52. Stringwhere=BOOK_ID+"=?";
  53. String[]whereValue={Integer.toString(id)};
  54. db.delete(TABLE_NAME,where,whereValue);
  55. }
  56. //修改操作
  57. publicvoidupdate(intid,Stringbookname,Stringauthor)
  58. {
  59. SQLiteDatabasedb=this.getWritableDatabase();
  60. Stringwhere=BOOK_ID+"=?";
  61. String[]whereValue={Integer.toString(id)};
  62. ContentValuescv=newContentValues();
  63. cv.put(BOOK_NAME,bookname);
  64. cv.put(BOOK_AUTHOR,author);
  65. db.update(TABLE_NAME,cv,where,whereValue);
  66. }
  67. }

第三步:修改main.xml布局如下,由两个EditText和一个ListView组成,代码如下:

[java] 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="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <EditText
  8. android:id="@+id/bookname"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. >
  12. </EditText>
  13. <EditText
  14. android:id="@+id/author"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. >
  18. </EditText>
  19. <ListView
  20. android:id="@+id/bookslist"
  21. android:layout_width="fill_parent"
  22. android:layout_height="wrap_content"
  23. >
  24. </ListView>
  25. </LinearLayout>

第四步:修改SQLiteDatabaseDemo.java代码如下:

[java] view plain copy
  1. packagecom.android.tutor;
  2. importandroid.app.Activity;
  3. importandroid.content.Context;
  4. importandroid.database.Cursor;
  5. importandroid.os.Bundle;
  6. importandroid.view.Menu;
  7. importandroid.view.MenuItem;
  8. importandroid.view.View;
  9. importandroid.view.ViewGroup;
  10. importandroid.widget.AdapterView;
  11. importandroid.widget.BaseAdapter;
  12. importandroid.widget.EditText;
  13. importandroid.widget.ListView;
  14. importandroid.widget.TextView;
  15. importandroid.widget.Toast;
  16. publicclassSQLiteDatabaseDemoextendsActivityimplementsAdapterView.OnItemClickListener{
  17. privateBooksDBmBooksDB;
  18. privateCursormCursor;
  19. privateEditTextBookName;
  20. privateEditTextBookAuthor;
  21. privateListViewBooksList;
  22. privateintBOOK_ID=0;
  23. protectedfinalstaticintMENU_ADD=Menu.FIRST;
  24. protectedfinalstaticintMENU_DELETE=Menu.FIRST+1;
  25. protectedfinalstaticintMENU_UPDATE=Menu.FIRST+2;
  26. publicvoidonCreate(BundlesavedInstanceState){
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.main);
  29. setUpViews();
  30. }
  31. publicvoidsetUpViews(){
  32. mBooksDB=newBooksDB(this);
  33. mCursor=mBooksDB.select();
  34. BookName=(EditText)findViewById(R.id.bookname);
  35. BookAuthor=(EditText)findViewById(R.id.author);
  36. BooksList=(ListView)findViewById(R.id.bookslist);
  37. BooksList.setAdapter(newBooksListAdapter(this,mCursor));
  38. BooksList.setOnItemClickListener(this);
  39. }
  40. @Override
  41. publicbooleanonCreateOptionsMenu(Menumenu){
  42. super.onCreateOptionsMenu(menu);
  43. menu.add(Menu.NONE,MENU_ADD,0,"ADD");
  44. menu.add(Menu.NONE,MENU_DELETE,0,"DELETE");
  45. menu.add(Menu.NONE,MENU_DELETE,0,"UPDATE");
  46. returntrue;
  47. }
  48. publicbooleanonOptionsItemSelected(MenuItemitem)
  49. {
  50. super.onOptionsItemSelected(item);
  51. switch(item.getItemId())
  52. {
  53. caseMENU_ADD:
  54. add();
  55. break;
  56. caseMENU_DELETE:
  57. delete();
  58. break;
  59. caseMENU_UPDATE:
  60. update();
  61. break;
  62. }
  63. returntrue;
  64. }
  65. publicvoidadd(){
  66. Stringbookname=BookName.getText().toString();
  67. Stringauthor=BookAuthor.getText().toString();
  68. //书名和作者都不能为空,或者退出
  69. if(bookname.equals("")||author.equals("")){
  70. return;
  71. }
  72. mBooksDB.insert(bookname,author);
  73. mCursor.requery();
  74. BooksList.invalidateViews();
  75. BookName.setText("");
  76. BookAuthor.setText("");
  77. Toast.makeText(this,"AddSuccessed!",Toast.LENGTH_SHORT).show();
  78. }
  79. publicvoiddelete(){
  80. if(BOOK_ID==0){
  81. return;
  82. }
  83. mBooksDB.delete(BOOK_ID);
  84. mCursor.requery();
  85. BooksList.invalidateViews();
  86. BookName.setText("");
  87. BookAuthor.setText("");
  88. Toast.makeText(this,"DeleteSuccessed!",Toast.LENGTH_SHORT).show();
  89. }
  90. publicvoidupdate(){
  91. Stringbookname=BookName.getText().toString();
  92. Stringauthor=BookAuthor.getText().toString();
  93. //书名和作者都不能为空,或者退出
  94. if(bookname.equals("")||author.equals("")){
  95. return;
  96. }
  97. mBooksDB.update(BOOK_ID,bookname,author);
  98. mCursor.requery();
  99. BooksList.invalidateViews();
  100. BookName.setText("");
  101. BookAuthor.setText("");
  102. Toast.makeText(this,"UpdateSuccessed!",Toast.LENGTH_SHORT).show();
  103. }
  104. @Override
  105. publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){
  106. mCursor.moveToPosition(position);
  107. BOOK_ID=mCursor.getInt(0);
  108. BookName.setText(mCursor.getString(1));
  109. BookAuthor.setText(mCursor.getString(2));
  110. }
  111. publicclassBooksListAdapterextendsBaseAdapter{
  112. privateContextmContext;
  113. privateCursormCursor;
  114. publicBooksListAdapter(Contextcontext,Cursorcursor){
  115. mContext=context;
  116. mCursor=cursor;
  117. }
  118. @Override
  119. publicintgetCount(){
  120. returnmCursor.getCount();
  121. }
  122. @Override
  123. publicObjectgetItem(intposition){
  124. returnnull;
  125. }
  126. @Override
  127. publiclonggetItemId(intposition){
  128. return0;
  129. }
  130. @Override
  131. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  132. TextViewmTextView=newTextView(mContext);
  133. mCursor.moveToPosition(position);
  134. mTextView.setText(mCursor.getString(1)+"___"+mCursor.getString(2));
  135. returnmTextView;
  136. }
  137. }
  138. }

第五步:运行程序效果如下:

第六步:查看我们所建的数据库。有两种方法:第一种用命令查看:adb shell ls data/data/com.android.tutor/databases。

另一种方法是用DDMS查看,在data/data下面对应的应用程序的包名 下会有如下数据库,如图所示:


更多相关文章

  1. android EditText监听事件处理方法
  2. Android(安卓)Studio实现格式化XML代码顺序
  3. 动态的修改自定义custom title
  4. iOS-SwiftMonkey测试
  5. Android(安卓)Http请求方法汇总
  6. android 中本地java代码与html交互总结
  7. [置顶] Android(安卓)fragment 获取id,findViewById为空
  8. android Listview 获取任意指定item数据 getChildAt 挂起 解决办
  9. Android(安卓)Design Support Library 介绍

随机推荐

  1. Android(安卓)简单的照相机程序
  2. Android中XML的基本操作(增、删、改、查)
  3. 解决ListView或ExpandableListView滚动时
  4. android 设置对话框的宽度和高度
  5. android studio 中出现"...ProjectScript
  6. Android实现图片倒影效果
  7. Android之uri、file、path相互转化
  8. Android(安卓)Gradle Build Error:Some f
  9. Android(安卓)GPS NETWORK定位
  10. android 自定义线程,自动结束本身线程