多语言展示
当前在线:1765今日阅读:26今日分享:39

Android 高手进阶教程:[12]SQLiteDatabase

大家好,好久没有更新博客了,最近由于身体不适让大家久等了,好了,直接进入主题~Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences 存储;第三种就是数据库 SQLiteDatabase 存储。      文件存储我就不用多说了,而 SharedPreferences 可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列。Android 高手进阶教程(七)之----Android 中 Preferences 的使用!     今天我们将讲一下 SQLiteDatabase 的使用。 而掌握 SqliteDatabase ,将会我们接下来掌握 ContentProvider 打下良好的基石。为了让大家更好的掌握,我们手把手完成该节的 Demo 。
方法/步骤
1

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

2

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

3

view plaincopy to clipboardprint?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, intnewVersion) {        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);}}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);www.linuxidc.com}//修改操作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);}}

4

修改main.xml布局如下,由两个EditText和一个ListView组成,代码如下:view plaincopy to clipboardprint?                                                            bs+�n&�'+@&rt(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)   {top:'� 0�@&yle='mso-spacerun:'yes'; color:rgb(0,0,0); font-size:14px; font-family:'宋体'; ' >   public final static String BOOK_ID = 'book_id';   public final static String BOOK_NAME = 'book_name';   public final static String BOOK_AUTHOR = 'book_author';

5

修改SQLiteDatabaseDemo.java代码如下:view plaincopy to clipboardprint?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 implementsAdapterView.OnItemClickListener {    private BooksDB mBooksDB;    private CursormCursor;    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);}@Overridepublic 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, intposition, 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;}'J�sa�'+@&s'; color:rgb(0,0,0); font-size:14px; font-family:'宋体'; ' >        BookName.setText('');        BookAuthor.setText('');        Toast.makeText(this, 'Delete Successed!',Toast.LENGTH_SHORT).show();    } @Override        public long getItemId(int position) {            return 0;        }        @Override        public View getView(int position, View convertView, ViewGroupparent) {            TextView mTextView = new TextView(mContext);            mCursor.moveToPosition(position);            mTextView.setText(mCursor.getString(1) + '___' +mCursor.getString(2));            return mTextView;        }}}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 implementsAdapterView.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);}@Overridepublic 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;@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;  }}

7

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

8

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

推荐信息