1. 程式人生 > >Android 高手進階教程(十三)之----Android 數據庫SQLiteDatabase的使用!!

Android 高手進階教程(十三)之----Android 數據庫SQLiteDatabase的使用!!

value bre encoding class 圖片 parent tex getitem length

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 @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組成,代碼如下:

<?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();  
    }  
      
    @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;  
        }  
          
    }  
}

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

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

技術分享圖片 技術分享圖片

第六步:查看我們所建的數據庫。有兩種方法:第一種用命令查看:adb shell ls data/data/com.android.tutor/databases。

另一種方法是用DDMS查看,在data/data下面對應的應用程序的包名 下會有如下數據庫,如圖所示:

技術分享圖片

Android 高手進階教程(十三)之----Android 數據庫SQLiteDatabase的使用!!