收藏 分享(赏)

数据存取之SQLite浅析.doc

上传人:hskm5268 文档编号:6353309 上传时间:2019-04-09 格式:DOC 页数:16 大小:261.50KB
下载 相关 举报
数据存取之SQLite浅析.doc_第1页
第1页 / 共16页
数据存取之SQLite浅析.doc_第2页
第2页 / 共16页
数据存取之SQLite浅析.doc_第3页
第3页 / 共16页
数据存取之SQLite浅析.doc_第4页
第4页 / 共16页
数据存取之SQLite浅析.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、一.SQLite 的介绍1.SQLite 简介SQLite 是一款轻型的数据库,是遵守 ACID 的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百 K 的内存就够了。它能够支持 Windows/Linux/Unix 等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、PHP、Java、C+、.Net 等,还有ODBC 接口,同样比起 Mysql、PostgreSQL 这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。2.SQLite 的特点:轻量级SQLite 和 C/S 模式

2、的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用 SQLite 一般只需要带上它的一个动态 库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows 下487KB、Linux 下347KB。不需要“安装“SQLite 的核心引擎本身不依赖第三方的软件,使用它也不需要“安装“。有点类似那种绿色软件。单一文件 数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件可以自由复制到其它目录或其它机器上。跨平台/可移植性除了主流操作系统 windows,linux 之后,SQLite 还支持其它一些不常用的操作系统。弱类型的

3、字段同一列中的数据可以是不同类型开源这个相信大家都懂的!3.SQLite 数据类型一般数据采用的固定的静态数据类型,而 SQLite 采用的是动态数据类型,会根据存入值自动判断。SQLite 具有以下五种常用的数据类型:NULL: 这个值为空值VARCHAR(n):长度不固定且其最大长度为 n 的字串,n 不能超过 4000。CHAR(n):长度固定为 n 的字串,n 不能超过 254。INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.REAL: 所有值都是浮动的数值,被存储为8字节的 IEEE 浮动标记序号.TEXT: 值为文本字符串,使用数据库编

4、码存储(TUTF-8, UTF-16BE or UTF-16-LE).BLOB: 值是 BLOB 数据块,以输入的数据格式进行存储。如何输入就如何存储 ,不改 变格式。DATA :包含了 年份、月份、日期。TIME: 包含了 小时、分钟、秒。相信学过数据库的童鞋对这些数据类型都不陌生的!二.SQLiteDatabase 的介绍Android 提供了创建和是用 SQLite 数据库的 API。SQLiteDatabase 代表一个数据库对象,提供了操作数据库的一些方法。在 Android 的 SDK 目录下有 sqlite3工具,我们可以利用它创建数据库、创建表和执行一些 SQL 语句。下面是

5、SQLiteDatabase 的常用方法。 SQLiteDatabase 的常用方法 方法名称 方法描述openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)打开或创建数据库insert(String table,String nullColumnHack,ContentValues values) 添加一条记录delete(String table,String whereClause,String whereArgs) 删除一条记录query(String table,String columns,Str

6、ing selection,String selectionArgs,String groupBy,String having,String orderBy)查询一条记录update(String table,ContentValues values,String whereClause,String whereArgs)修改记录execSQL(String sql) 执行一条 SQL 语句close() 关闭数据库1、打开或者创建数据库在 Android 中以使用 SQLiteDatabase 的静态方法 openOrCreateDatabase(String path,SQLiteData

7、bae.CursorFactory factory)打开或者创建一个数据库。它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase 对象,否则抛出异常 FileNotFoundException。下面是创建名为“stu.db”数据库的代码: db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db“,null); 2、创建表创建一张表很简单。首先,编写创建表的 SQL 语句,然后,调用 SQLiteDatabase

8、的execSQL()方法来执行 SQL 语句便可以创建一张表了。下面的代码创建了一张用户表,属性列为:_id(主键并且自动增加) 、sname(学生姓名) 、snumber(学号) private void createTable(SQLiteDatabase db) /创建表 SQL 语句 String stu_table=“create table usertable(_id integer primary key autoincrement,sname text,snumber text)“; /执行 SQL 语句 db.execSQL(stu_table); 3、插入数据插入数据有两种

9、方法:SQLiteDatabase 的 insert(String table,String nullColumnHack,ContentValues values)方法,参数一是表名称,参数二是空列的默认值,参数三是 ContentValues 类型的一个封装了列名称和列值的 Map;编写插入数据的 SQL 语句,直接调用 SQLiteDatabase 的 execSQL()方法来执行第一种方法的代码: private void insert(SQLiteDatabase db) /实例化常量值 ContentValues cValue = new ContentValues(); /添加用

10、户名 cValue.put(“sname“,“xiaoming“); /添加密码 cValue.put(“snumber“,“01005“); /调用 insert()方法插入数据 db.insert(“stu_table“,null,cValue); 第二种方法的代码: private void insert(SQLiteDatabase db) /插入数据 SQL 语句 String stu_sql=“insert into stu_table(sname,snumber) values(xiaoming,01005)“; /执行 SQL 语句 db.execSQL(sql); 4、删除数

11、据删除数据也有两种方法:调用 SQLiteDatabase 的 delete(String table,String whereClause,String whereArgs)方法,参数一是表名称,参数二是删除条件,参数三是删除条件值数组;编写删除 SQL 语句,调用 SQLiteDatabase 的 execSQL()方法来执行删除。第一种方法的代码: private void delete(SQLiteDatabase db) /删除条件 String whereClause = “_id=?“; /删除条件参数 String whereArgs = String.valueOf(2);

12、/执行删除 db.delete(“stu_table“,whereClause,whereArgs); 第二种方法的代码: private void delete(SQLiteDatabase db) /删除 SQL 语句 String sql = “delete from stu_table where _id = 6“; /执行 SQL 语句 db.execSQL(sql); 5、修改数据修改数据有两种方法:调用 SQLiteDatabase 的 update(String table,ContentValues values,String whereClause, String wher

13、eArgs)方法。参数是表名称,参数是更行列 ContentValues类型的键值对(Map) ,参数是更新条件(where 字句) ,参数是更新条件数组。编写更新的 SQL 语句,调用 SQLiteDatabase 的 execSQL 执行更新。第一种方法的代码: private void update(SQLiteDatabase db) /实例化内容值 ContentValues values = new ContentValues(); /在 values 中添加内容 values.put(“snumber“,“101003“); /修改条件 String whereClause =

14、“id=?“; /修改添加参数 String whereArgs=String.valuesOf(1); /修改 db.update(“usertable“,values,whereClause,whereArgs); 第二种方法的代码: private void update(SQLiteDatabase db) /修改 SQL 语句 String sql = “update stu_table set snumber = 654321 where id = 1“; /执行 SQL db.execSQL(sql); 6、查询数据在 Android 中查询数据是通过 Cursor 类来实现的,

15、当我们使用 SQLiteDatabase.query()方法时,会得到一个 Cursor 对象,Cursor 指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:public Cursor query(String table,String columns,String selection,String selectionArgs,String groupBy,String having,String orderBy,String limit);各个参数的意义说明:table:表名称columns:列名称数组selection:条件字句,相当于 whereselectionArgs

16、:条件字句,参数数组groupBy:分组列having:分组条件orderBy:排序列limit:分页查询限制Cursor:返回值,相当于结果集 ResultSetCursor 是一个游标接口,提供了遍历查询结果的方法,如移动指针方法 move(),获得列值方法 getString()等.Cursor 游标常用方法方法名称 方法描述getCount() 获得总的数据项数isFirst() 判断是否第一条记录isLast() 判断是否最后一条记录moveToFirst() 移动到第一条记录moveToLast() 移动到最后一条记录move(int offset) 移动到指定记录moveToNe

17、xt() 移动到下一条记录moveToPrevious() 移动到上一条记录getColumnIndexOrThrow(String columnName) 根据列名称获得列索引getInt(int columnIndex) 获得指定列索引的 int 类型值getString(int columnIndex) 获得指定列缩影的 String 类型值下面就是用 Cursor 来查询数据库中的数据,具体代码如下: private void query(SQLiteDatabase db) /查询获得游标 Cursor cursor = db.query (“usertable“,null,null

18、,null,null,null,null); /判断游标是否为空 if(cursor.moveToFirst() /遍历游标 for(int i=0;i“ + “姓名:“+name+“ “+“年龄:“ +age+“ “+“性别:“ +sex); /关闭数据库 db.close(); /修改数据的方法 class ModifyListener implements OnClickListener Override public void onClick(View v) StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,“stu_

19、db“,null,1); /得到一个可写的数据库 SQLiteDatabase db =dbHelper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(“sage“, “23“); /where 子句 “?“是占位符号,对应后面的“1“, String whereClause=“id=?“; String whereArgs = String.valueOf(1); /参数1 是要更新的表名 /参数2 是一个 ContentValeus 对象 /参数3 是 where 子句 db.update(“st

20、u_table“, cv, whereClause, whereArgs); /删除数据的方法 class DeleteListener implements OnClickListener Override public void onClick(View v) StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,“stu_db“,null,1); /得到一个可写的数据库 SQLiteDatabase db =dbHelper.getReadableDatabase(); String whereClauses = “id=?

21、“; String whereArgs = String.valueOf(2); /调用 delete 方法,删除数据 db.delete(“stu_table“, whereClauses, whereArgs); StuDBHelper.java package com.lingdududu.testSQLiteDb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactor

22、y; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class StuDBHelper extends SQLiteOpenHelper private static final String TAG = “TestSQLite“; public static final int VERSION = 1; /必须要有构造函数 public StuDBHelper(Context context, String name, CursorFactory factory, int ve

23、rsion) super(context, name, factory, version); / 当第一次创建数据库的时候,调用该方法 public void onCreate(SQLiteDatabase db) String sql = “create table stu_table(id int,sname varchar(20),sage int,ssex varchar(10)“; /输出创建数据库的日志信息 Log.i(TAG, “create Database-“); /execSQL 函数用于执行 SQL 语句 db.execSQL(sql); /当更新数据库的时候执行该方法

24、public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) /输出更新数据库的日志信息 Log.i(TAG, “update Database-“); main.xml 程序运行的效果图:当点击创建数据库按钮:LogCat 窗口输出的信息为:当点击更新数据库按钮:LogCat 窗口输出的信息为:当点击查询数据库按钮:LogCat 窗口输出的信息为:使用 adb 命令查看数据库:1.在命令行窗口输入 adb shell 回车,就进入了 Linux 命令行,现在就可以使用 Linux 的命令了。2.ls 回车,显

25、示所有的东西,其中有个 data。 (ls:显示所有,cd:进入)3.cd data 回车,再 ls 回车,cd data 回车,ls 回车后就会看到很多的com.。 。 。 ,那就是系统上的应用程序包名,找到你数据库程序的包名,然后进入。4.进去后在查看所有,会看到有 databases,进入 databases,显示所有就会发现你的数据库名字,这里使用的是“stu_db“。5.sqlite3 stu_db 回车就进入了你的数据库了,然后“.schema”就会看到该应用程序的所有表及建表语句。6.之后就可以使用标准的 SQL 语句查看刚才生成的数据库及对数据执行增删改查了。# sqlite3

26、 stu_dbsqlite3 stu_dbSQLite version 3.6.22Enter “.help“ for instructionsEnter SQL statements terminated with a “;“sqlite .schema.schemaCREATE TABLE android_metadata (locale TEXT);CREATE TABLE stu_table(id int,sname varchar(20),sage int,ssex varchar(10); -创建的表sqlite select * from stu_table;select * f

27、rom stu_table;1|xiaoming|21|malesqlite插入数据sqlite insert into stu_table values(2,xiaohong,20,female);插入的数据记得要和表中的属性一一对应insert into stu_table values(2,xiaohong,20,female);sqlite select * from stu_table;select * from stu_table;1|xiaoming|21|male2|xiaohong|20|female - 插入的数据sqlite当点击修改数据的按钮时候sqlite select * from stu_table;select * from stu_table;1|xiaoming|23|male -年龄被修改为232|xiaohong|20|femalesqlite当点击删除数据的按钮sqlite select * from stu_table;select * from stu_table;1|xiaoming|23|male id=2的数据已经被删除总之,我们可以在代码中执行数据库的增删改查,也可以在 adb 命令行下实现。不过因为SQLite 没有客户端,不能直接的查看数据库变化后的信息,所以常用 adb 命令行查看数据库改变后的信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报