Android数据库SQLiteDatabase的使用
来源:互联网 发布:各国网站域名后缀 编辑:程序博客网 时间:2024/05/29 09:23
大家好,好久没有更新博客了,最近由于身体不适让大家久等了,好了,直接进入主题。
Android提供了三种数据存储方式:
第一种是文件存储。
第二种是SharedPreferences存储。
第三种是数据库SQLiteDatabase存储。
文件存储我就不多说了,而SharedPreferences可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列《Android高手进阶教程》7.Android Preferences的使用
今天我们将讲一下Android 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
android:id
=
"@+id/author"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
/>
<
ListView
android:id
=
"@+id/bookslist"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
/>
</
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下面对应的应用程序的包名 下会有如下数据库,如图所示:
由于代码都是现写,时间原因,没有全部加注释,如果大家有什么不懂的地方,可以留言。ok,今天就到这里,大家晚安!
- Android 数据库SQLiteDatabase的使用
- Android 数据库SQLiteDatabase的使用
- Android 数据库SQLiteDatabase的使用!!
- Android 数据库SQLiteDatabase的使用!!
- 11.Android数据库SQLiteDatabase的使用
- Android数据库SQLiteDatabase的使用
- Android:SqliteDatabase 数据库的简单使用
- SQLiteDataBase数据库的使用
- SQLiteDatabase数据库的使用
- Android SQLiteDatabase的使用
- Android SQLiteDatabase的使用
- Android SQLiteDatabase的使用
- android sqlitedatabase的使用
- Android数据库(SQLiteDatabase)使用小结
- Android数据库(SQLiteDatabase)使用小结
- Android数据库(SQLiteDatabase)使用小结 .
- Android 高手进阶教程(十二)----Android数据库SQLiteDatabase的使用!!
- Android SQLiteDatabase数据库的总结
- Linux下面的线程锁,条件变量以及信号量的使用
- 关于GetClientRect与GetWindowRect的误区
- Android如何获得指定文件的Uri
- 【集合】HashMap哈希映射类
- Android入门列表框(ListView)的使用
- Android数据库SQLiteDatabase的使用
- 解决google掉线办法 本地域名解析
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- 修改Dialog大小
- ASP.NET自定义控件 第一天 简单的星级控件
- 百度搜索引擎代码
- TCP三次握手/四次挥手详解
- 外排序思路 转自维基百科
- Android 用户界面---拖放(Drag and Drop)(一)