Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!

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

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

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

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

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

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

Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!_第1张图片

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

[java] view plaincopy
  1. 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       @Override      public 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);       }       @Override      public 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组成,代码如下:

[c-sharp] view plaincopy
  1. <?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代码如下:

[java] view plaincopy
  1. 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();       }              @Override      public 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;           }           @Override          public int getCount() {               return mCursor.getCount();           }           @Override          public Object getItem(int position) {               return null;           }           @Override          public long getItemId(int position) {               return 0;           }           @Override          public 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;           }                  }   }    

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

Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!_第2张图片

Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!_第3张图片

Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!_第4张图片

Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!_第5张图片

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

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

Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!_第6张图片

由于代码都是现写,时间原因,没有全部加注释,如果大家 有什么不懂的地方,可以留言,我会尽快答复,如果需源代码,请留下你的Email

地址,ok,今天就到这里,大家晚安!

你可能感兴趣的:(android,boolean,textview,数据存储,应用程序)