Android
发布时间:2022-04-28 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android编程操作嵌入式关系型SQLite数据库实例详解,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本文实例分析了Android编程操作嵌入式关系型sqlite数据库的方法。分享给大家供大家参考,具体如下:
sqlite特点
1.Android平台中嵌入了一个关系型数据库sqlite,和其他数据库不同的是sqlite存储数据时不区@L_801_10@型
例如一个字段声明为Integer类型,我们也可以将一个字符串存入,一个字段声明为布尔型,我们也可以存入浮点数。
除非是主键被定义为Integer,这时只能存储64位整数
2.创建数据库的表时可以不指定数据类型,例如:
3.
sqlite@L_
696_18@大部分标准
sql语句,增删改查语句都是通用的,
分页查询语句和
MysqL相同
SELECT * FROMperson LIMIT 20 OFFSET 10
SELECT * FROMperson LIMIT 20,10
创建数据库
1.定义类继承sqliteOpenHelper
2.声明构造函数,4个参数
3.重写onCreate()方法
4. 重写upGrade()方法
示例:
@H_
801_38@
package cn.itcast.
sqlite;
import android.content.Co
ntext;
import android.database.
sqlite.
sqliteDatabase;
import android.database.
sqlite.
sqliteOpen
Helper;
import android.database.
sqlite.
sqliteDatabase.
cursorFactory;
public class DBOpen
Helper extends
sqliteOpen
Helper
{
/
**
* 创建Open
Helper
* @param co
ntext 上下文
* @param name
数据库名
* @param factory 游标工厂
* @param version
数据库版本,不要设置为0,如果为0则会每次都创建
数据库
*/
public DBOpen
Helper(Co
ntext co
ntext,
String name,
cursorFactory factory,
int version)
{
super(co
ntext,name,factory,version
);
}
/
**
* 当
数据库第一次创建的时候被
调用
*/
public void onCreate(
sqliteDatabase db)
{
db.exec
sql("
create table person(id
INTEGER PRIMARY KEY AUTOINCREMENT,
Name)"
);
}
/
**
* 当
数据库版本发生改变的时候被
调用
*/
public void onUpgrade(
sqliteDatabase db,
int oldVersion,
int newVersion)
{
db.exec
sql("
alter table person ADD balance"
);
}
}
public void test
createdb()
{
DBOpen
Helper
Helper = new DBOpen
Helper(getCo
ntext(),"itcast.db",null,2
);
Helper.
getWritableDatabase(
); // 创建
数据库
}
CRUD操作
1.和JDBC访问数据库不同,操作sqlite数据库无需加载驱动,不用获取连接,直接可以使用
获取sqliteDatabase对象之后通过该对象直接可以执行sql语句:
@H_
801_38@
sqliteDatabase.exec
sql()
sqliteDatabase.rawQuery()
2.getReadableDatabase()和getWritableDatabase()的区别
查看源代码后我们发现getReadableDatabase()在通常情况下返回的就是getWritableDatabase()拿到的数据库只有在抛出异常的时候才会以只读方式打开
3.数据库对象缓存
getWritableDatabase()方法最后会使用一个成员变量记住这个数据库对象,下次打开时判断是否重用
4.sqliteDatabase封装了insert()、delete()、update()、query()四个方法也可以对数据库进行操作
这些方法封装了部分sql语句,通过参数进行拼接
执行crud操作有两种方式,第一种方式自己写sql语句执行操作,第二种方式是使用sqliteDatabase类调用响应的方法执行操作
execsql()方法可以执行INSERT、delete、update和CREATETABLE之类有更改行为的sql语句; rawQuery()方法用于执行SELEct语句。
第一种方式示例:
@H_
801_38@
package cn.itcast.
sqlite.
service;
import java.uti
l.ArrayList;
import java.uti
l.List;
import android.content.Co
ntext;
import android.database.
cursor;
import android.database.
sqlite.
sqliteDatabase;
import cn.itcast.
sqlite.DBOpen
Helper;
import cn.itcast.
sqlite.domain.Person;
public class
sqlPerson
service
{
private DBOpen
Helper
Helper;
public
sqlPerson
service(Co
ntext co
ntext)
{
Helper = new DBOpen
Helper(co
ntext,2
);//初始化
数据库
}
/
**
* 插入
一个Person
* @param p 要插入的Person
*/
public void insert(Person
p) {
sqliteDatabase db =
Helper.
getWritableDatabase(
); //
获取到
数据库
db.exec
sql("INSERT INTO person(name,phone,balanc
E) VALUES(?,?)",new Ob
ject[]
{ p.getName(),p.getPhone() }
);
db.close(
);
}
/
**
* 根据ID
删除
* @param id 要
删除的PERSON的ID
*/
public void
delete(
Integer id)
{
sqliteDatabase db =
Helper.
getWritableDatabase(
);
db.exec
sql("
deletE FROM person WHERE id=?",new Ob
ject[]
{ id }
);
db.close(
);
}
/
**
* 更新Person
* @param p 要更新的Person
*/
public void
update(Person
p) {
sqliteDatabase db =
Helper.
getWritableDatabase(
);
db.exec
sql("
updatE person SET name=?,phone=?,balance=? WHERE id=?",p.getPhone(),p.getBalance(),p.getId() }
);
db.close(
);
}
/
**
* 根据ID查找
* @param id 要查的ID
* @return 对应的对象,如果未找到返回null
*/
public Person find(
Integer id)
{
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.rawQuery("
SELECT name,balance FROM person WHERE id=?",
new String[]
{ id.to
String() }
);
Person p = null;
if (
cursor.moveToNext())
{
String name =
cursor.get
String(
cursor.get
columnIndex("name")
);
String phone =
cursor.get
String
(1);
Integer balance =
cursor.ge
Tint(2
);
p = new Person(id,balanc
E);
}
cursor.close(
);
db.close(
);
return p;
}
/
**
*
查询所有Person对象
* @return Person对象集合,如未找到,返回
一个size()为0的List
*/
public List<Person> findAll()
{
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.rawQuery("
SELECT id,balance FROM person",
null);
List<Person> persons = new ArrayList<Person>(
);
while (
cursor.moveToNext())
{
Integer id =
cursor.ge
Tint(0
);
String name =
cursor.get
String
(1);
String phone =
cursor.get
String(2
);
Integer balance =
cursor.ge
Tint(3
);
person
s.add(new Person(id,balanc
E));
}
cursor.close(
);
db.close(
);
return persons;
}
/
**
*
查询某一页数据
* @param page
页码
* @param size 每页记录数
* @return
*/
public List<Person> findPage(int page,int siz
E) {
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.rawQuery("
SELECT id,balance FROM person LIMIT ?,?" //,
new String[]
{ String.valueOf((page - 1) * siz
E),
String.valueOf(siz
E) }
);
List<Person> persons = new ArrayList<Person>(
);
while (
cursor.moveToNext())
{
Integer id =
cursor.ge
Tint(0
);
String name =
cursor.get
String
(1);
String phone =
cursor.get
String(2
);
Integer balance =
cursor.ge
Tint(3
);
person
s.add(new Person(id,balanc
E));
}
cursor.close(
);
db.close(
);
return persons;
}
/
**
*
获取记录数
* @return 记录数
*/
publi
c int getCount()
{
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.rawQuery("
SELECT COUNT(*) FROM person",
null);
cursor.moveToNext(
);
return
cursor.ge
Tint(0
);
}
}
第二种方式示例:
@H_
801_38@
/
**
* 插入
一个Person
* @param p 要插入的Person
*/
public void insert(Person
p) {
sqliteDatabase db =
Helper.
getWritableDatabase(
);
ContentValues values = new ContentValues(
);
value
s.put("name",p.getName()
);
value
s.put("phone",p.getPhone()
);
value
s.put("balance",p.getBalance()
);
// 第
一个参数是表名,第二个参数是如果要插入一条空记录时指定的某一列的名字,第三个参数是数据
db.insert("person",values
);
db.close(
);
}
/
**
* 根据ID
删除
* @param id 要
删除的PERSON的ID
*/
public void
delete(
Integer id)
{
sqliteDatabase db =
Helper.
getWritableDatabase(
);
db.
delete("person","id=?",
new String[]
{ id.to
String() }
);
db.close(
);
}
/
**
* 更新Person
* @param p 要更新的Person
*/
public void
update(Person
p) {
sqliteDatabase db =
Helper.
getWritableDatabase(
);
ContentValues values = new ContentValues(
);
value
s.put("id",p.getId()
);
value
s.put("name",p.getBalance()
);
db.
update("person",values,
new String[]
{ p.getId().to
String() }
);
db.close(
);
}
/
**
* 根据ID查找
* @param id 要查的ID
* @return 对应的对象,如果未找到返回null
*/
public Person find(
Integer id)
{
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.query("person",
new String[]
{ "name","phone","balance" },
new String[]
{ id.to
String() },
null);
Person p = null;
if (
cursor.moveToNext())
{
String name =
cursor.get
String(
cursor.get
columnIndex("name")
);
String phone =
cursor.get
String
(1);
Integer balance =
cursor.ge
Tint(2
);
p = new Person(id,balanc
E);
}
cursor.close(
);
db.close(
);
return p;
}
/
**
*
查询所有Person对象
* @return Person对象集合,返回
一个size()为0的List
*/
public List<Person> findAll()
{
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.query("person",
new String[]
{ "id","name","id desc"
);
List<Person> persons = new ArrayList<Person>(
);
while (
cursor.moveToNext())
{
Integer id =
cursor.ge
Tint(0
);
String name =
cursor.get
String
(1);
String phone =
cursor.get
String(2
);
Integer balance =
cursor.ge
Tint(3
);
person
s.add(new Person(id,balanc
E));
}
cursor.close(
);
db.close(
);
return persons;
}
/
**
*
查询某一页数据
* @param page
页码
* @param size 每页记录数
* @return
*/
public List<Person> findPage(int page,int siz
E) {
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.query( //
"person",(page - 1) * size + "," + siz
E);
List<Person> persons = new ArrayList<Person>(
);
while (
cursor.moveToNext())
{
Integer id =
cursor.ge
Tint(0
);
String name =
cursor.get
String
(1);
String phone =
cursor.get
String(2
);
Integer balance =
cursor.ge
Tint(3
);
person
s.add(new Person(id,balanc
E));
}
cursor.close(
);
db.close(
);
return persons;
}
/
**
*
获取记录数
* @return 记录数
*/
publi
c int getCount()
{
sqliteDatabase db =
Helper.getReadableDatabase(
);
cursor
cursor = db.query( //
"person",
new String[]
{ "COUNT(*)" },
null);
cursor.moveToNext(
);
return
cursor.ge
Tint(0
);
}
事务管理
1.使用在sqlite数据库时可以使用sqliteDatabase类中定义的相关方法控制事务
begintransaction() 开启事务
settransactionsuccessful() 设置事务成功标记
endtransaction() 结束事务
2.endtransaction()需要放在finally中执行,否则事务只有到超时的时候才自动结束,会降低数据库并发效率
示例:
希望本文所述对大家Android程序设计有所帮助。
大佬总结
以上是大佬教程为你收集整理的Android编程操作嵌入式关系型SQLite数据库实例详解全部内容,希望文章能够帮你解决Android编程操作嵌入式关系型SQLite数据库实例详解所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。