Android数据库SQList的使用示例

Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences存储;第三种就是数据库SQLiteDatabase存储。文件存储我就不用多说了,而SharedPreferences可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。今天我们将讲一下SQLiteDatabase的使用。而掌握SqliteDatabase,将会我们接下来掌握ContentProvider打下良好的基石。

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

第二步:创建一个新的类BooksDB.java这个类要继承

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;
} 

}
} 
时间: 2024-08-07 21:27:56

Android数据库SQList的使用示例的相关文章

10分钟理解Android数据库的创建与使用(附详解和示例代码)

1.Android数据库简介. Android系统的framework层集成了Sqlite3数据库,我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下优点: (1)零配置,无需安装和配置: (2)储存在单一磁盘文件中的一个完整的数据库: (3)数据库文件可以在不同字节顺序的机器间自由共享: (4)支持数据大小至2TB: (5)足够小,全部源代码大致3万行C代码,250KB: (6)比目前流行的大多数数据库的操作要快: (7)开源. 2.Sqlite 基本操作语句和

android菜鸟学习笔记20----Android数据存储(四))Android数据库操作

Android内置了一个名为SQLite的关系型数据库,这是一款轻量型的数据库,操作十分简便.SQLite与别的数据库不同的是,它没有数据类型.可以保存任何类型的数据到你所想要保存的任何表的任何列中.但它又支持常见的类型比如: NULL, VARCHAR, TEXT, INTEGER, BLOB, CLOB...等. 唯一的例外是:integer primary key 此字段只能存储64位整数. 在JAVA项目中,要使用JDBC操作数据库需要加载数据库驱动,连接数据库等操作.Android简化

Android数据库高手秘籍(三)——使用LitePal升级表

在上一篇文章中,我们学习了LitePal的基本用法,体验了使用框架来进行创建表操作的便利.然而大家都知道,创建表只是数据库操作中最基本的一 步而已,我们在一开始创建的表结构,随着需求的变更,到了后期是极有可能需要修改的.因此,升级表的操作对于任何一个项目也是至关重要的,那么今天我们就 一起来学习一下,在Android传统开发当中升级表的方式,以及使用LitePal来进行升级表操作的用法.如果你还没有看过前一篇文章,建议先去参考 一下 Android数据库高手秘籍(二)——创建表和LitePal的

基础篇:6.Android数据库编程---SQLite

简介: 在Android平台上,继承了一个嵌入式关系型数据库---SQLite.SQLite具有跨平台特性,可以在所有主要的操作系统上运行.SQLite通过独占性和共享锁实现独立事务处理,因此多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据,在进行写操作之前,必须先获得独占锁.另一方面,SQLite采取动态数据类型,当某个值插入数据库时,SQLite会检查它的类型,如果该类型与所关联的列不匹配,SQLite则会进行强制转换.SQLite支持以下几种数据类型:NULL(空值).I

android数据库的升级的写法

在基类的table中加入upgrade操作: public abstract class DbBaseTable { private static final String TAG = "DbBaseTable"; /** * @return the DB table name */ abstract String getName(); /** * Creates the DB table according to the DB scheme * * @param db */ abst

Android数据库信息显示在listview上

Key Points: 1.使用SimpleCursorAdapter将Android数据库信息显示在listview上 adapter = new SimpleCursorAdapter(this, R.layout.user_list_cell, null, new String[]{"name","sex"}, new int[]{R.id.tvName, R.id.tvSex}); 2.长按listview弹出对话框删除信息.顺带学习了AlertDialog

android自定义倒计时控件示例

这篇文章主要介绍了Android秒杀倒计时自定义TextView示例,大家参考使用吧 自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import and

Android清理设备内存详细完整示例(一)

MainActivity如下: package come.on; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; i

如何将Android数据库操作通用化(三)

概述 悠悠绿水傍林侵日落观山四望回 幽林古寺孤明月冷井寒泉碧映台 鸥飞满浦渔舟泛鹤伴闲亭仙客来 游径踏花烟上走流溪远棹一篷开 概述 一个不小心都写了三篇了,也不知道大家还看得懂不?如果看不懂最好给我留个言,我好下一次改正. 接着上次的说,准备工作都已经做好了,现在咱们就要开始着手解决阻挡Android数据库操作通用化的五个问题了. 我们先回顾一下问题: 问题1:表名的获取 问题2:如何将实体中的数据,按照对应关系导入到数据库中 问题3:明确实体中主键是谁?获取到主键中封装的值 问题4:如何将数据