android学习 --数据库操作

转载自 http://www.open-open.com/lib/view/open1325160000889.html

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.具体代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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组成,代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<? 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代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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;
}
 
}
}

第五步:运行程序效果如下:
a2.jpg 
a3.jpg 
a5.jpg 
a6.jpg 
a7.jpg
a8.jpg 

第六步:查看我们所建的数据库。有两种方法:第一种用命令查看:adb shell ls data/data/com.android.tutor/databases。
另一种方法是用DDMS查看,在data/data下面对应的应用程序的包名 下会有如下数据库,如图所示:
a9.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值