編輯:Android開發實例
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下面對應的應用程序的包名 下會有如下數據庫,如圖所示:
由於代碼都是現寫,時間原因,沒有全部加注釋,如果大家 有什麼不懂的地方,可以留言,我會盡快答復,如果需源代碼,請留下你的Email
地址,ok,今天就到這裡,大家晚安!
GPS定位是目前很多手機都有的功能,且非常實用。本文以實例形式講述了Android中GPS定位的用法。分享給大家供大家參考之用。具體方法如下: 一般在Androi
本文給大家帶來一個很實用的小控件ClearEditText,就是在Android系統的輸入框右邊加入一個小圖標,點擊小圖標可以清除輸入框裡面的內容,IOS上面直接
本文實例總結了Android編程中圖片特效處理方法。分享給大家供大家參考,具體如下: 這裡介紹的Android圖片處理方法包括: 轉換 - drawa
今天記錄一下TextView的倒影效果,顯示一串文字,然後在文字的下方顯示出它的倒影,先上效果圖: 最重要的就是View中getDrawingCache()方法