轻量级数据库,SQLite遵守ACID(Atomicity,Consistency,Isolation,Durability)原则,SQLite不要求系统提供太大的资源,仅不到1MB的内存空间就可以运行SQLite.SQLite主要是应用在小型嵌入式设备中,目前被很多嵌入式产品广泛使用,支持Windows,Linux,Unix等主流操作系统,可以和很多程序语言相结合,比如 C#,Tcl,Java等,处理速度快,
SQlite存储了android系统的许多应用信息,比如联系人,来电信息,短信息记录等,为了方便存储,管理,查询数据,Android向外部开放了SQLite数据库相关的API,通过这些API,开发者可以实现对基本数据库,表,及记录的操作,包括数据库的创建,数据库的删除,表创建,表删除,记录插入,记录删除,记录更新,记录查询等.
1,数据库操作
1),数据库的创建及打开
SQLite提供了openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)方法打开指定的数据库.
其中,path 是指数据库的路径,
factory用于构造查询时的游标,若factory为null,则表示使用默认的factory构造游标
flags指定数据库打开的模式有四种模式:OPEN_READONLY(只读方式打开) OPEN_READWRITE(以可读可写方式打开) CREATE_IF_NECESSARY(首先检查数据库是否存在,不存在则创建) NO_LOCALIZED_COLLATORS(打开数据库时,不按照本地化语言对数据库进行排序),若同时指定多个模式.可使用"|"隔开.也可以使用openOrCreateDatabase(String path,SQlite-Database.CursorFactory)打开数据库,.创建数据库就是在文件系统中创建一个SQLite数据库的文件,应用程序必须对创建数据库的目录 有可写的权限,否则会抛出异常
示例:
try {
SQLiteDatabase myData = this.openDatabase("qdu_st.db",nul,NO_LOCALIZED_COLLATORS);
}
catch(Exception e) {
db=null;
}
2),数据库删除
SQLite提供了deleteDatabase删除指定的数据库,例如
this.deleteDatabase("qdu_st.db")
3),数据库关闭
SQLite提供关闭数据库的方法,sqliteDatabase.close;
2,表操作
1),表创建,数据库包含多个表,每个表可存储多条记录,数据库创建之后,下部就是创建表,SQLite没有提供专门的方法创建表,可以通过execSQL方法并指定SQL语句创建表
String SQL_CT = "CREATE TABLE student(ID INTEGER PRIMARY KEY,age INTEGER,name TEXT)";
sqliteDatabase.execSQL(SQL_CT);
2),表删除,,通过execSQL方法指定SQL语句删除表
String SQL_DROP_TABLE = "DROP TABLE student";
sqliteDatabase.execSQL(SQL_DROP_TABLE);
3,记录操作
1),记录插入
ContentValues contentValues = new ContentVlaue();
contentValues.put(ID,1);
contentValues.put.(age,26);
contentValues.put(name,"StudentA")
sqliteDatabase.insert(student,null,contentValues)
或者
String SQL_INSERT="INSERT INTO student(ID ,age ,name) values (1,26,"StudentA")";
sqliteDatabase,execSQL(SQL_INSECT);
2),记录更新
ContentValues contentValues = new ContentVlaue();
contentValues.put(ID,1);
contentValues.put.(age,25);
contentValues.put(name,"StudentA")
sqliteDatabase.update(student,contentValues,"name=StudentA",null);
或者
String SQL_UPDATE = " UPDATA student SET age=25 where name="StudentA"";
sqlDatabase.execSQL(SQL_UPDATE);
3),记录查询
sqliteDatabase.query(true,student,null,"name="StudentA",null,null,null,null,null);
或者
String SQL_QUERY = "SELECT age name from student WHERE name="StudentA"";
sqliteDatabase.execSQL(SQL_QUERY);
4),记录删除
sqliteDatabase.update(student,"name=StudentA",null);
游标Cursor的使用
在数据库中,Cursor提供了一种对从表中检索出的数据进行操作的灵活手段,本质就是:一种能从包括多条数据记录的结果集中每次提取一条记录的机制.游标总是与一条SQL语句相关联,因为游标的结果集(可能是零条,一条或者由相关的选择语句检索出来的多条记录,)和结果集中指向特定记录的游标位置组成,,当决定对结果集进行处理时,必须声明一个指向该结果集的游标,,就像是打开文件所得到的文件句柄一样,只要文件打开成功,这个文件句柄就可以代表该文件,
游标允许应用程序对查询语句SELECT返回的行结果集中每一行进行相同或不同的操作,,而不是对整个结果集进行同一种操作,可以基于游标位置对表中数据进行删除或者更新,,所以正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个处理方式能够沟通
游标是 系统为用户开设的一个数据缓存区,存放SQL语句的执行结果,每个游标区都有一个名字,用户可使用SQL语句逐一从游标中获取记录,赋给主变量并交由主语言进一步处理,
主语言是面向记录的.一组主变量只能存放一条记录.,仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,嵌入式SQL引入了Cursor的概念,用来协调两种不同的处理方式.再数据库开发过程中,当检索的数据只是一条记录时,所编写的事务代码往往使用SELECT INSERT语句,.但是我们常常会从某一结果集中逐一读取一条记录,那么如何解决这种问题呢,,游标为我们提供了一种极为优秀的解决方案.如下,,,,游标可分为三种类型:
Transact_SQL游标,API服务器游标和客户游标,
(1)Transact_SQL 游标
Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL 游标不支持提取数据块或多行数据。
(2)API游标
API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。
(3)客户游标
客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。