Android數據庫SQLite的使用示例

openkk 12年前發布 | 254K 次閱讀 Android Android開發 移動開發

Android 提供了三種數據存儲方式,第一種是文件存儲;第二種是SharedPreferences存儲;第三種就是數據庫SQLiteDatabase存儲。文件存儲我就不用多說了,而SharedPreferences可以存取簡單的數據(int,double,float.etc),它經常用于數據緩存,因為它讀取存儲簡單。詳細可以參見本系列。Android高手進階教程(七)之----Android 中Preferences的使用!

今天我們將講一下SQLiteDatabase的使用。而掌握SqliteDatabase,將會我們接下來掌握ContentProvider打下良好的基石。為了讓大家更好的掌握,我們手把手完成該節的Demo。

第一步:新建一個Android工程,命名為SQLiteDatabaseDemo.
a1.jpg

第二步:創建一個新的類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); } }</pre>

第三步:修改main.xml布局如下,由兩個EditText和一個ListView組成,代碼如下: </div>
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;

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> </pre>

第四步:修改SQLiteDatabaseDemo.java代碼如下: </div>
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; }

} } </pre>

第五步:運行程序效果如下: </div>
a2.jpg
a3.jpg
a5.jpg
a6.jpg
a7.jpg
a8.jpg

第六步:查看我們所建的數據庫。有兩種方法:第一種用命令查看:adb shell ls data/data/com.android.tutor/databases。
另一種方法是用DDMS查看,在data/data下面對應的應用程序的包名 下會有如下數據庫,如圖所示:
</div>
a9.jpg

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!