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

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.具体代码如下:

package com.android.tutor;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class BooksDB extends SQLiteOpenHelper {  private final static String DATABASE_NAME = "BOOKS.db";  private final static int DATABASE_VERSION = 1;  private final static String TABLE_NAME = "books_table";  public final static String BOOK_ID = "book_id";  public final static String BOOK_NAME = "book_name";  public final static String BOOK_AUTHOR = "book_author";    public BooksDB(Context context) {// TODO Auto-generated constructor stub  super(context, DATABASE_NAME, null, DATABASE_VERSION);}//创建table@Overridepublic void onCreate(SQLiteDatabase db) {  String sql = "CREATE TABLE " + TABLE_NAME + " (" + BOOK_ID        + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, "+  BOOK_AUTHOR +" text);";      db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;db.execSQL(sql);onCreate(db);}public Cursor select() {SQLiteDatabase db = this.getReadableDatabase();Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);return cursor;}//增加操作 public long insert(String bookname,String author)  {    SQLiteDatabase db = this.getWritableDatabase();    /* ContentValues */    ContentValues cv = new ContentValues();    cv.put(BOOK_NAME, bookname);    cv.put(BOOK_AUTHOR, author);    long row = db.insert(TABLE_NAME, null, cv);    return row;  } //删除操作  public void delete(int id)  {    SQLiteDatabase db = this.getWritableDatabase();    String where = BOOK_ID + " = ?";    String[] whereValue ={ Integer.toString(id) };    db.delete(TABLE_NAME, where, whereValue);  }  //修改操作  public void update(int id, String bookname,String author)  {    SQLiteDatabase db = this.getWritableDatabase();    String where = BOOK_ID + " = ?";    String[] whereValue = { Integer.toString(id) };      ContentValues cv = new ContentValues();    cv.put(BOOK_NAME, bookname);    cv.put(BOOK_AUTHOR, author);    db.update(TABLE_NAME, cv, where, whereValue);  }}

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

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  >  <EditText    android:id="@+id/bookname"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   >  </EditText>  <EditText    android:id="@+id/author"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   >  </EditText>  <ListView   android:id="@+id/bookslist"   android:layout_width="fill_parent"   android:layout_height="wrap_content"  >  </ListView>   </LinearLayout>

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

package com.android.tutor;import android.app.Activity;import android.content.Context;import android.database.Cursor;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class SQLiteDatabaseDemo extends Activity implements AdapterView.OnItemClickListener {private BooksDB  mBooksDB;private Cursor   mCursor;private EditText BookName;private EditText BookAuthor;private ListView BooksList;private int BOOK_ID = 0;protected final static int MENU_ADD = Menu.FIRST;protected final static int MENU_DELETE = Menu.FIRST + 1;protected final static int MENU_UPDATE = Menu.FIRST + 2;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        setUpViews();    }        public void setUpViews(){    mBooksDB = new BooksDB(this);    mCursor  = mBooksDB.select();        BookName = (EditText)findViewById(R.id.bookname);    BookAuthor = (EditText)findViewById(R.id.author);    BooksList = (ListView)findViewById(R.id.bookslist);        BooksList.setAdapter(new BooksListAdapter(this, mCursor));    BooksList.setOnItemClickListener(this);    }        @Override    public boolean onCreateOptionsMenu(Menu menu) {    super.onCreateOptionsMenu(menu);           menu.add(Menu.NONE, MENU_ADD, 0, "ADD");        menu.add(Menu.NONE, MENU_DELETE, 0, "DELETE");        menu.add(Menu.NONE, MENU_DELETE, 0, "UPDATE");        return true;    }        public boolean onOptionsItemSelected(MenuItem item)    {      super.onOptionsItemSelected(item);      switch (item.getItemId())      {case MENU_ADD:add();break;case MENU_DELETE:delete();break;case MENU_UPDATE:update();break;      }      return true;    }        public void add(){    String bookname = BookName.getText().toString();    String author  = BookAuthor.getText().toString();    //书名和作者都不能为空,或者退出    if (bookname.equals("") || author.equals("")){    return;    }     mBooksDB.insert(bookname, author);     mCursor.requery();     BooksList.invalidateViews();     BookName.setText("");     BookAuthor.setText("");     Toast.makeText(this, "Add Successed!", Toast.LENGTH_SHORT).show();    }        public void delete(){if (BOOK_ID == 0) {return;}mBooksDB.delete(BOOK_ID);mCursor.requery();BooksList.invalidateViews();BookName.setText("");BookAuthor.setText("");Toast.makeText(this, "Delete Successed!", Toast.LENGTH_SHORT).show();    }        public void update(){    String bookname = BookName.getText().toString();    String author  = BookAuthor.getText().toString();    //书名和作者都不能为空,或者退出    if (bookname.equals("") || author.equals("")){    return;    }    mBooksDB.update(BOOK_ID, bookname, author);    mCursor.requery();BooksList.invalidateViews();BookName.setText("");BookAuthor.setText("");Toast.makeText(this, "Update Successed!", Toast.LENGTH_SHORT).show();    }    @Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {mCursor.moveToPosition(position);BOOK_ID = mCursor.getInt(0);BookName.setText(mCursor.getString(1));BookAuthor.setText(mCursor.getString(2));}        public class BooksListAdapter extends BaseAdapter{    private Context mContext;    private Cursor mCursor;    public BooksListAdapter(Context context,Cursor cursor) {    mContext = context;    mCursor = cursor;}@Overridepublic int getCount() {return mCursor.getCount();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView mTextView = new TextView(mContext);mCursor.moveToPosition(position);mTextView.setText(mCursor.getString(1) + "___" + mCursor.getString(2));return mTextView;}        }}

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

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

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


更多相关文章

  1. Android中的RxJava
  2. Android退出当前应用程序的方法
  3. 安卓开发日记--2017.10.10
  4. Android(安卓)面试题
  5. Android(安卓)SQLite使用详解和多线程并发访问
  6. Android(安卓)高手进阶教程(十三)之----Android(安卓)数据库SQLi
  7. Android界面绘制_canvas解析
  8. cocos2d jsb 打包 Android(安卓)APK
  9. Android(安卓)本地代码如何输出日志

随机推荐

  1. android logo:内核、android开机动画
  2. Android的架构与Android应用程序启动流程
  3. android开发必看资源URL
  4. Android点击事件之后跳到界面指定位置
  5. android上的i-jetty (1)环境搭建
  6. Android(安卓)入门教程:Android(安卓)Stud
  7. Android(安卓)API 中文 (112) —— Thumb
  8. editView多行光标位置问题和联系人问题
  9. Android(安卓)Edittext 显示光标 获取焦
  10. Android(安卓)之 ImageSwitch图片转换器