一、SQLite是什么
SQLite数据库存储是Android系统提供的数据存储方式之一 SQLite是专为嵌入式设备设计的一款轻量级数据库 SQLite占用资源非常低,在嵌入式设备中,只需要几百K的内存 SQLite支持标准的SQL语法,遵循数据库的ACID事务 SQLite是android系统自带,不需要单独安装,不需要用户名密码就可以使用。
二、SQLite怎么用
step1:新建类继承SQLiteOpenHelper
新建一个类(类名自定义)继承SQLiteOpenHelper,并实现构造方法、重写oncreate和onupgrade方法。
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
|
public
class
DBHelper
extends
SQLiteOpenHelper {
private
String createSQL =
"create table student("
+
"id integer primary key autoincrement not null ,"
+
"name varchar(20) not null,"
+
"age integer not null ,"
+
"gender varchar(2) not null)"
;
/**
*
* @param context
* @param name 数据库名字
* @param factory 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。
如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求!
* @param version 数据库版本号
*/
public
DBHelper(Context context, String name, CursorFactory factory,
int
version) {
super
(context, name, factory, version);
}
@Override
public
void
onCreate(SQLiteDatabase db) {
db.execSQL(createSQL);
}
/**
* 该方法会在数据库需要升级的时候调用
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public
void
onUpgrade(SQLiteDatabase db,
int
oldVersion,
int
newVersion) {
db.execSQL(
"ALTER TABLE student ADD COLUMN other TEXT"
);
}
}
|
step2:创建SQLiteDatabase对象
这里有两种创建方式,分别是:
1、只读模式
1
|
SQLiteDatabase sqldb = dbhelper.getReadableDatabase();
|
2、读写模式
1
|
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
|
step3:通过实现增删改查操作
1、增
1
2
3
4
5
6
7
8
9
10
11
12
|
private
void
insert() {
String name = nameEdit.getText().toString();
//获得SQLiteDatabase对象,读写模式
sqldb = dbhelper.getWritableDatabase();
//ContentValues类似HashMap,区别是ContentValues只能存简单数据类型,不能存对象
ContentValues values =
new
ContentValues();
values.put(
"name"
, name);
values.put(
"age"
,
20
);
values.put(
"gender"
,
"男"
);
//执行插入操作
sqldb.insert(TABLE_NAME,
null
, values);
}
|
2、删
1
2
3
4
5
6
|
private
void
delete() {
sqldb = dbhelper.getWritableDatabase();
//第二个参数是WHERE语句(即执行条件,删除哪条数据)
//第三个参数是WHERE语句中占位符(即"?"号)的填充值
sqldb.delete(TABLE_NAME,
"name=?"
,
new
String[]{
"jack"
});
//删除name的值是jack的那条记录
}
|
3、改
1
2
3
4
5
6
7
8
9
10
11
|
private
void
modify() {
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
ContentValues values =
new
ContentValues();
values.put(
"name"
,
"Jet"
);
//第二个参数是修改的字段及修改的值(已经存放到ContentValues中)
//第三个参数是WHERE语句
//第四个参数是WHERE语句中占位符的填充值
//如果第三四个参数为null,那就将每条记录都改掉
sqldb.update(TABLE_NAME, values,
null
,
null
);
}
|
4、查
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
private
void
show() {
//得到数据库对象
sqldb = dbhelper.getReadableDatabase();
//创建游标
Cursor mCursor = sqldb.query(TABLE_NAME,
new
String[] {
"id"
,
"name"
,
"age"
,
"gender"
},
"age>?"
,
new
String[]{
"10"
},
null
,
null
,
null
);
//游标置顶
mCursor.moveToFirst();
//遍历
do
{
String name = mCursor.getString(mCursor.getColumnIndex(
"name"
));
System.out.println(name);
}
while
(mCursor.moveToNext());
}
|
三、举个数据库连接实例
DBHelper类代码
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
|
public
class
DBHelper
extends
SQLiteOpenHelper {
private
String createSQL =
"create table student("
+
"id integer primary key autoincrement not null ,"
+
"name varchar(20) not null,"
+
"age integer not null ,"
+
"gender varchar(2) not null)"
;
/**
*
* @param context
* @param name 数据库名字
* @param factory 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。
如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求!
* @param version 数据库版本号
*/
public
DBHelper(Context context, String name, CursorFactory factory,
int
version) {
super
(context, name, factory, version);
}
@Override
public
void
onCreate(SQLiteDatabase db) {
db.execSQL(createSQL);
}
/**
* 该方法会在数据库需要升级的时候调用
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public
void
onUpgrade(SQLiteDatabase db,
int
oldVersion,
int
newVersion) {
db.execSQL(
"ALTER TABLE student ADD COLUMN other TEXT"
);
}
}
|
MainActivity类代码
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
|
public
class
MainActivity
extends
Activity
implements
OnClickListener {
private
Button addBtn;
private
Button deleteBtn;
private
Button modifyBtn;
private
Button showBtn;
private
EditText nameEdit;
private
DBHelper dbhelper;
private
SQLiteDatabase sqldb;
private
static
final
String TABLE_NAME =
"student"
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindID();
dbhelper =
new
DBHelper(
this
,
"demodb"
,
null
,
1
);
}
/**
* 绑定ID和监听事件
*/
private
void
bindID() {
addBtn = (Button) findViewById(R.id.addBtn);
deleteBtn = (Button) findViewById(R.id.deleteBtn);
modifyBtn = (Button) findViewById(R.id.modifyBtn);
showBtn = (Button) findViewById(R.id.showBtn);
nameEdit = (EditText) findViewById(R.id.nameEdit);
addBtn.setOnClickListener(
this
);
deleteBtn.setOnClickListener(
this
);
modifyBtn.setOnClickListener(
this
);
showBtn.setOnClickListener(
this
);
}
@Override
public
void
onClick(View v) {
switch
(v.getId()) {
case
R.id.addBtn:
insert();
break
;
case
R.id.deleteBtn:
delete();
break
;
case
R.id.modifyBtn:
modify();
break
;
case
R.id.showBtn:
show();
break
;
default
:
break
;
}
}
private
void
insert() {
String name = nameEdit.getText().toString();
//获得SQLiteDatabase对象,读写模式
sqldb = dbhelper.getWritableDatabase();
//ContentValues类似HashMap,区别是ContentValues只能存简单数据类型,不能存对象
ContentValues values =
new
ContentValues();
values.put(
"name"
, name);
values.put(
"age"
,
20
);
values.put(
"gender"
,
"男"
);
//执行插入操作
sqldb.insert(TABLE_NAME,
null
, values);
}
private
void
delete() {
sqldb = dbhelper.getWritableDatabase();
//第二个参数是WHERE语句(即执行条件,删除哪条数据)
//第三个参数是WHERE语句中占位符(即"?"号)的填充值
sqldb.delete(TABLE_NAME,
"name=?"
,
new
String[]{
"jack"
});
}
private
void
modify() {
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
ContentValues values =
new
ContentValues();
values.put(
"name"
,
"Jet"
);
//第二个参数是修改的字段及修改的值(已经存放到ContentValues中)
//第三个参数是WHERE语句
//第四个参数是WHERE语句中占位符的填充值
//如果第三四个参数为null,那就将每条记录都改掉
sqldb.update(TABLE_NAME, values,
null
,
null
);
}
private
void
show() {
//得到数据库对象
sqldb = dbhelper.getReadableDatabase();
//创建游标
Cursor mCursor = sqldb.query(TABLE_NAME,
new
String[] {
"id"
,
"name"
,
"age"
,
"gender"
},
"age>?"
,
new
String[]{
"10"
},
null
,
null
,
null
);
//游标置顶
mCursor.moveToFirst();
//遍历
do
{
String name = mCursor.getString(mCursor.getColumnIndex(
"name"
));
System.out.println(name);
}
while
(mCursor.moveToNext());
}
@Override
protected
void
onDestroy() {
super
.onDestroy();
//退出程序后,关闭数据库资源
sqldb.close();
}
}
|
布局文件代码
<linearlayout
android:layout_height=
"match_parent"
android:layout_width=
"match_parent"
android:orientation=
"vertical"
tools:context=
"${relativePackage}.${activityClass}"
xmlns:android=
"http://schemas.android.com/apk/res/android"
<edittext
android:hint=
"请输入学生姓名"
android:id=
"@+id/nameEdit"
android:layout_height=
"wrap_content"
android:layout_width=
"match_parent"
>
<button
android:id=
"@+id/addBtn"
android:layout_height=
"wrap_content"
android:layout_width=
"match_parent"
android:text=
"新增"
>
</button>
<button
android:id=
"@+id/deleteBtn"
android:layout_height=
"wrap_content"
android:layout_width=
"match_parent"
android:text=
"删除"
>
</button>
<button
android:id=
"@+id/modifyBtn"
android:layout_height=
"wrap_content"
android:layout_width=
"match_parent"
android:text=
"修改"
>
</button>
<button
android:id=
"@+id/showBtn"
android:layout_height=
"wrap_content"
android:layout_width=
"match_parent"
android:text=
"显示"
>
</button>
</edittext>
</linearlayout>
|