您的位置:首页 > 移动开发 > Android开发

Android 数据库SQLiteDatabase的使用

2012-03-21 11:49 369 查看
转自:/article/1362993.html

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

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.具体代码如下:

[java] view
plaincopy

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组成,代码如下:

[java] view
plaincopy

<?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

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下面对应的应用程序的包名 下会有如下数据库,如图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: