Android使用SQLiteDatabase操作SQLite数据库
来源:互联网 发布:菜园旋转式喷头淘宝 编辑:程序博客网 时间:2024/05/29 19:42
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。 execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句。
execSQL()方法的使用例子:
1
SQLiteDatabase db = ....;
2
db.execSQL(
"insert into person(name, age) values('传智播客', 4)"
);
3
db.close();
1
SQLiteDatabase db = ....;
2
db.execSQL(
"insert into person(name, age) values(?,?)"
,
new
Object[]{
"传智播客"
,
4
});
3
db.close();
SQLiteDatabase的rawQuery() 用于执行select语句,使用例子如下:
1
SQLiteDatabase db = ....;
2
Cursor cursor = db.rawQuery(“select * from person”,
null
);
3
while
(cursor.moveToNext()) {
4
int
personid = cursor.getInt(
0
);
//获取第一列的值,第一列的索引从0开始
5
String name = cursor.getString(
1
);
//获取第二列的值
6
int
age = cursor.getInt(
2
);
//获取第三列的值
7
}
8
cursor.close();
9
db.close();
1
Cursor cursor = db.rawQuery(
"select * from person where name like ? and age=?"
,
new
String[]{
"%传智%"
,
"4"
});
除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。这些方法实际上是给那些不太了解SQL语法的菜鸟使用的,对于熟悉SQL语法的程序员而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。
Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。Insert()方法内部实际上通过构造insert SQL语句完成数据的添加,Insert()方法的第二个参数用于指定空值字段的名称,相信大家对该参数会感到疑惑,该参数的作用是什么?是这样的:如果第三个参数values 为Null或者元素个数为0, 由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要, insert语句必须给定一个字段名,如:insert into person(name) values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person() values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。
1
SQLiteDatabase db = databaseHelper.getWritableDatabase();
2
ContentValues values =
new
ContentValues();
3
values.put(
"name"
,
"传智播客"
);
4
values.put(
"age"
,
4
);
5
long
rowid = db.insert(“person”,
null
, values);
//返回新添记录的行号,与主键id无关
01
//delete()方法的使用:
02
SQLiteDatabase db = databaseHelper.getWritableDatabase();
03
db.delete(
"person"
,
"personid<?"
,
new
String[]{
"2"
});
04
db.close();
05
//上面代码用于从person表中删除personid小于2的记录。
06
07
//update()方法的使用:
08
SQLiteDatabase db = databaseHelper.getWritableDatabase();
09
ContentValues values =
new
ContentValues();
10
values.put(“name”, “传智播客”);
//key为字段名,value为值
11
db.update(
"person"
, values,
"personid=?"
,
new
String[]{
"1"
});
12
db.close();
13
//上面代码用于把person表中personid等于1的记录的name字段的值改为“传智播客”。
query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数:
1
SQLiteDatabase db = databaseHelper.getWritableDatabase();
2
Cursor cursor = db.query(
"person"
,
new
String[]{
"personid,name,age"
},
"name like ?"
,
new
String[]{
"%传智%"
},
null
,
null
,
"personid desc"
,
"1,2"
);
3
while
(cursor.moveToNext()) {
4
int
personid = cursor.getInt(
0
);
//获取第一列的值,第一列的索引从0开始
5
String name = cursor.getString(
1
);
//获取第二列的值
6
int
age = cursor.getInt(
2
);
//获取第三列的值
7
}
8
cursor.close();
9
db.close();
上面代码用于从person表中查找name字段含有“传智”的记录,匹配的记录按personid降序排序,对排序后的结果略过第一条记录,只获取2条记录。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
- Android 使用SQLiteDatabase操作SQLite数据库
- Android使用SQLiteDatabase操作SQLite数据库
- Android使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase 操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用 SQLiteDatabase 操作 SQLite 数据库
- 使用 SQLiteDatabase 操作 SQLite 数据库
- 使用 SQLiteDatabase 操作 SQLite 数据库
- 使用 SQLiteDatabase 操作 SQLite 数据库
- Android 使用SQLiteDatabase操作SQLite数据库(一)
- Android 使用SQLiteDatabase操作SQLite数据库(二)
- Java设计模式——观察者模式
- ViewGroup的onInterceptTouchEvent和onTouchEvent个人理解(图解)
- oracle update关联表的思路总结
- 在Python中调用Java方法 Pyjnius
- 关于调试IPC设备的小结
- Android使用SQLiteDatabase操作SQLite数据库
- 类似旋转木马效果的converflow,3D视觉效果
- ov511驱动移植 2.6.32.2(一)
- Python 之 使用 PIL 库做图像处理
- C++调用Pyhon实例
- AdView
- 家乡的小河
- DOJO遍历DataGrid数据并转换成json格式数据
- iAd框架中几个响应事件