SQLite基础

1.在Android系统中,除了可以使用文件或者SharedPreference存储数据,
还可以选择使用SQLite数据库存储数据。SQLite是一个嵌入式关系型数据库。

2、SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型

3、SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。

4、但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。

5、另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略 name字段的类型信息:

CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

SQLite可以解析大部分标准SQL语句,如:

查询语句:select * from 表名 where 条件子句 group by 分组字句 having … order by 排序子句,如:

    select  *  from person
    select * from person order by id desc
    select name from person group by name having count(*)>1

分页SQL与MySQL 类似,下面SQL语句获取5条记录,跳过前面3条记录

select * from Account limit 5 offset 3 或者 select * from Account limit 3,5

插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘工工’,3)

修改语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘工‘ where id=10

删除语句:delete from 表名 where 条件子句。如:delete from person where id=10

使用SQLiteDatabase操作SQLite数据库

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API。

可以调用SQLiteDatabase的静态方法:

    public static SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)

flag参数可以是OPEN_READWRITE,OPEN_READONLY,CREATE_IF_NECESSARY,NO_LOCALIZED_COLLATORS四个中的一个或者多个(多个模式组合用|隔离)

   public static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory)
   public static SQLiteDatabase openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)

来打开文件系统中位于绝对路径path的数据库。

还可以通过Context对象调用

  public abstract SQLiteDatabase openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)

直接在私有数据库目录创建或打开一个名为name的数据库,

注意:mode只的是MODE_PRIVATE , MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE。

Context还有:

  public abstract String[] databaseList();//返回私有数据库目录所有数据库名字
  public abstract boolean deleteDatabase(String name);//删除私有数据库目录内文件名为name的数据库。

除了在文件系统中创建SQLite数据库,android还支持SQLite内存数据库。在某些需要临时创建数据库,并且对操作速率相对要求高的情况下,SQLite内存数据库就发挥作用了,用SQLiteDatabase的静态方法:

public static SQLiteDatabase create(SQLiteDatabase.CursorFactory factory)

来创建,创建失败返回null。

最后记住,不管用何种方式打开了数据库,获得的SQLite对象不再使用时,都要调用close()来关闭打开的数据库,否则抛出IllegalStateException异常。

使用SQLiteDatabase对象可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。

execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;rawQuery()方法可以执行select语句。

execSQL()方法的使用例子:

SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values('工工', 4)");
db.close();

执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“工工”这些参数值应该由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。

    原文作者:朝圣之旅
    原文地址: https://www.jianshu.com/p/278186474a94
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞