博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite
阅读量:7263 次
发布时间:2019-06-29

本文共 5264 字,大约阅读时间需要 17 分钟。

hot3.png

数据库:存储数据的仓库,每一个数据库都可以存在多张数据表

数据表:具体存储数据的表,类似excel表格

常见的数据库有:MS SQL Server、MY SQL、Oracle……

SQLite并不是数据库服务器软件,在开发中,它表现为某1个文件。

查看SQLite数据文件的软件:SQLiteSpy、SQLiteExpert

【初始化过程】

1. 创建数据库

2. 创建数据表

【访问数据流程】

1. 连接到(打开)数据库

2. 访问数据表

创建数据库

方法1:openOrCreateDatabase()

创建数据表

CREATE TABLE '表名' (设计字段列表);

字段列表的格式为:字段(列)名、数据类型、约束

创建数据表示例:

String sql = "CREATE TABLE 'student' (" +

"_id integer primary key autoincrement, " +

"stu_name varchar(16) not null, " +

"stu_phone_number varchar(16) not null unique" +

")";

注意:SQLite是非常轻量级的数据库,所以,SQLite对存储的数据类型要求是不严格的,但是,仍然推荐规范的使用SQLite数据库。

String name = "tedu.db";int mode = MODE_PRIVATE;CursorFactory factory = null;SQLiteDatabase db;db = openOrCreateDatabase(name, mode, factory); // 创建数据表String sql = "CREATE TABLE 'student' (" +        "_id integer primary key autoincrement, " +        "stu_name varchar(16) not null, " +        "stu_phone_number varchar(16) not null unique" +        ")";db.execSQL(sql);

数据操作:增删改查

增:insert into '表名' (字段列表) values (值列表)

删:delete from '表名' where子句

改:update '表名' set 字段=值的赋值列表 where子句

查:select 字段列表 from '表名' where子句 排序 分页

使用SQLiteDatabase实现数据管理

insert()

  第1个参数:表名

  第2个参数:无视,当确保第3个参数为有效值时,第2个参数没有任何意义

  第3个参数:确定要增加的数据,第3个参数ContentValues对象必须至少调用过1次put方法,即可使得该参数是有效的

  返回值:新记录的ID,如果增加失败,则返回-1

// 无视,当确保第3个参数为有效值时,第2个参数没有任何意义String nullColumnHack = null;// 确定要增加的数据ContentValues values = new ContentValues();values.put("stu_name", "Alex");values.put("stu_phone_number", "010-88668866");// 执行增加数据long id = db.insert(table, nullColumnHack, values);if (id != -1) {Toast.makeText(this, "增加完成,id=" + id, Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "增加失败,原因嘛,不知道", Toast.LENGTH_SHORT).show();}

delete()

  第1个参数:表名

  第2个参数:where子句,其中各字段对应的值(例如_id=1)可以使用问号(?)表示,如果使用问号,则对应的值需要在第3个参数中体现

  第3个参数:第2个参数中各问号对应的值,如果第2个参数中没有问号,则第3个参数可以为null

  返回值:受影响的行数,即删除的条目数量

eg:

// delete from student where id>1// delete from student where stu_name='Jack' and// stu_phone_number='010-88886666'// 第2个参数:where子句,其中各字段对应的值(例如_id=1)可以使用问号(?)表示,如果使用问号,则对应的值需要在第3个参数中体现String whereClause = "stu_name=? and stu_phone_number=?";// 第3个参数:第2个参数中各问号对应的值,如果第2个参数中没有问号,则第3个参数可以为nullString[] whereArgs = { "Jack", "027-66668888" };int affectedRows = db.delete(table, whereClause, whereArgs);if (affectedRows > 0) {Toast.makeText(this, "删除完成,受影响的行数:" + affectedRows,Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "删除失败,没有符合删除条件的记录!", Toast.LENGTH_SHORT).show();}

update()

eg:

values = new ContentValues();values.put("stu_phone_number", "10086");whereClause = "_id=? and stu_name=?";whereArgs = new String[] { 5 + "", "Rose" };affectedRows = db.update(table, values, whereClause, whereArgs);if (affectedRows > 0) {Toast.makeText(this, "编辑完成,受影响的行数:" + affectedRows,Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "编辑失败,没有符合删除条件的记录!", Toast.LENGTH_SHORT).show();}

【查询数据】

方法:query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

参数说明:

String table:表名

String[] columns:要查询的列(字段),如果为null,则表示查询所有列

String selection:查询条件,即where子句

String[] selectionArgs:查询条件中各问号(?)对应的值

String groupBy:分组子句,暂无视

String having:分组筛选子句,暂无视

String orderBy:排序,例如 _id asc,或 name asc, _id desc

返回值:Cursor

【关于Cursor】

Cursor可以理解为一个表格,表格中是查询出的数据结果。

Cursor在获取数据之前,必须调用move???系列方法确定其位置,然后再获取数据。

推荐使用for循环实现Cursor的遍历:

for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())

【关于SimpleCursorAdapter】

SimpleCursorAdapter是使用Cursor作为数据源的Adapter。

使用SimpleCursorAdapter时,应该保证在数据源Cursor中存在 _id 字段。

eg:

// 第2个参数,表示要查询的字段的列表,为null值时表示查询所有字段String[] columns = { "stu_name", "_id", "stu_phone_number" };// 第3个参数,参考whereClauseString selection = "_id>?";// 第4个参数,参考whereArgsString[] selectionArgs = { "0" };// 第5个参数,分组,暂无视String groupBy = null;// 第6个参数,分组后的筛选,暂无视String having = null;// 第7个参数,排序,asc表示顺序排列,desc表示倒序排列String orderBy = "stu_name asc";// 执行查询Cursor c = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {    String stuId = c.getString(1);    String stuName = c.getString(0);    String stuPhoneNumber = c.getString(2);    Log.d(tag , "id -> " + stuId);    Log.d(tag, "name -> " + stuName);    Log.d(tag, "phone number -> " + stuPhoneNumber);}

【SQLiteOpenHelper】

SQLiteOpenHelper是用于管理数据库的工具,可以实现创建数据库文件、创建数据表等操作,及数据库版本的升级、降级等。

使用SQLiteOpenHelper类定义的getReadableDatabase()或getWritableDatabase()方法可以获取SQLiteDatabase对象,以实现数据访问操作。

eg:

public class DbOpenHelper extends SQLiteOpenHelper {    public DbOpenHelper(Context context) {        super(context, "tarena.db", null, 1);    }        @Override    public void onCreate(SQLiteDatabase db) {        // 创建数据表student        String sql = "CREATE TABLE 'student' ("        + "_id integer primary key autoincrement, "        + "stu_name varchar(16) not null, "        + "stu_phone_number varchar(16) not null unique" + ")";        db.execSQL(sql);    }        @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    // TODO Auto-generated method stub    }}

使用SQLite的流程

---------------------------

1. 规划数据库与数据表

2. 自定义类继承自SQLiteOpenHelper,至少重写onCreate()方法,在onCreate()方法中完成所有的初始化操作,例如创建数据表、向数据表中插入默认数据。

3. 创建上述自定义类的对象,调用getReadableDatabase()方法获取SQLiteDatabase对象,以实现数据访问操作。

4. 确定数据访问结束后,关闭相关资源。

转载于:https://my.oschina.net/dreamerspace/blog/627690

你可能感兴趣的文章
centos7 笔记本安装 黑屏
查看>>
linux服务之FTP
查看>>
Java NIO与IO的区别和比较
查看>>
MySQL的分页技术总结
查看>>
Crontab 用法
查看>>
MySQL权限体系介绍
查看>>
Python-新随笔
查看>>
SSL网站的建立与访问
查看>>
Zend Optimizer的性能测试
查看>>
只显示指定网卡IP地址命令
查看>>
Django项目部署
查看>>
Hyper-V 3 限定虚拟机可用的CPU利用率
查看>>
C#中对象的四种相等比较方式
查看>>
openstack issue 2
查看>>
mysql无法查看innodb的表
查看>>
OSB安装随记
查看>>
Windows server 2003 CA配置(二)
查看>>
RDIFramework.NET 框架之组织机构权限设置
查看>>
linux grub 引导启动过程详解
查看>>
PendingIntent
查看>>