Android SQLiteDatabase使用详细教程

2018-09-08 16:04:25
  • Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是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,String 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,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库。它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。

    下面是创建名为“stu.db”数据库的代码: 
    openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory) 
    参数1 数据库创建的路径

    参数2 一般设置为null就可以了

    db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db”,null); 
    2、创建表

    创建一张表的步骤很简单:

    编写创建表的SQL语句 
    调用SQLiteDatabase的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、插入数据 
    插入数据有两种方法: 
    ①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法, 
    参数1 表名称, 
    参数2 空列的默认值 
    参数3 ContentValues类型的一个封装了列名称和列值的Map; 
    ②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行 
    第一种方法的代码:

    private void insert(SQLiteDatabase db){ 
    //实例化常量值 
    ContentValues cValue = new ContentValues(); 
    //添加用户名 
    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、删除数据

    删除数据也有两种方法:

    ①调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法 
    参数1 表名称 
    参数2 删除条件 
    参数3 删除条件值数组

    ②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。

    第一种方法的代码:

    private void delete(SQLiteDatabase db) { 
    //删除条件 
    String whereClause = “id=?”; 
    //删除条件参数 
    String[] whereArgs = {String.valueOf(2)}; 
    //执行删除 
    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[] whereArgs)方法 
    参数1 表名称 
    参数2 跟行列ContentValues类型的键值对Key-Value 
    参数3 更新条件(where字句) 
    参数4 更新条件数组

    ②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。

    第一种方法的代码:

    private void update(SQLiteDatabase db) { 
    //实例化内容值 ContentValues values = new ContentValues(); 
    //在values中添加内容 
    values.put(“snumber”,”101003”); 
    //修改条件 
    String whereClause = “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类来实现的,当我们使用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:条件字句,相当于where

    参数selectionArgs:条件字句,参数数组

    参数groupBy:分组列

    参数having:分组条件

    参数orderBy:排序列

    参数limit:分页查询限制

    参数Cursor:返回值,相当于结果集ResultSet

    Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.

    Cursor游标常用方法

    方法名称 方法描述 
    getCount() 获得总的数据项数 
    isFirst() 判断是否第一条记录 
    isLast() 判断是否最后一条记录 
    moveToFirst() 移动到第一条记录 
    moveToLast() 移动到最后一条记录 
    move(int offset) 移动到指定记录 
    moveToNext() 移动到下一条记录 
    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,null,null,null,null);

    //判断游标是否为空 
    if(cursor.moveToFirst() { 
    //遍历游标 
    for(int i=0;i

  • 以上是Android SQLiteDatabase使用详细教程的内容,更多 SQLiteDatabase Android 使用 教程 详细 的内容,请您使用右上方搜索功能获取相关信息。
  • 2019-08-15 13:32:18

    Node.js是如何解决服务器高性能瓶颈问题的

    在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然就上升了。

  • 2019-08-15 13:33:53

    nodejs的10个性能优化技巧

    在我接触JavaScript(无论浏览器还是NodeJS)的时间里,总是遇到有朋友有多线程的需求。而在NodeJS方面,有朋友甚至直接说到,NodeJS是单线程的,无法很好的利用多核CPU。那么我们在使用过程中,就要非常注意性能优化了

  • 2019-08-16 13:18:48

    使用ffmpeg进行ts切片并AES-128加密

    由于解密的key文件都是公开的,所以并不能算上完全加密,用户只要把你的key+m3u8里的ts切片文件全部下载,用ffmpeg还是能解,这时就要考虑url的key防止用户直接下载和盗链。 ​

  • 2019-08-18 22:22:54

    Error:error: unable to remove file: Permission denied

    JNI里写的C++增加了函数或修改了,如果此时是Debug模式下,而且还没退出程序,就出现这个Permission denied的提示。解决也很简单:就是退出App即可。如果退出无响应,直接拔usb,重新插上也可以

  • 2019-08-19 10:24:29

    浅析Express中的路由与应用模式

    Express是一个基于Node.js的轻量级web开发框架,具有体积小,使用灵活等特点。查看Express的源码,如果不计供使用的中间件,主体框架只有一千余行代码,非常简练。

  • 2019-08-19 15:50:17

    记录PHP的进程和线程理解

    线程是进程的一个执行流,线程不能分配系统资源,它是进程的一部分,比进程更小的独立运行的单位。 解释一下:进程有两个特性:一是资源的所有权,一个是调度执行(指令集),线程是调度执行中的一部分,是指进程执行过程的路径,也叫程序执行流。线程有时候也叫轻量级进程。

  • 2019-08-20 08:51:52

    一台Linux服务器可以负载多少个连接?

    我们在压测一台目标服务器,想看下负载的连接数,当我们压到一定数量的时候,控制台突然报"too many open files",这是因为linux系统创建一个TCP连接的时候,都会创建一个socket句柄,每个socket句柄就是一个文件句柄。

  • 2019-08-20 08:56:42

    Linux下Http高并发参数优化之TCP参数

    Linux 内核参数考虑的是最通用场景,并不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数。其次,对 Nginx 的一些参数,也需要根据服务情况进行调整。