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 使用 教程 详细 的内容,请您使用右上方搜索功能获取相关信息。
  • 2020-02-06 13:32:10

    android.os.NetworkOnMainThreadException

    在Android 4.0以上,网络连接不能放在主线程上,不然就会报错android.os.NetworkOnMainThreadException。但是4.0下版本可以不会报错。

  • 2020-02-07 23:46:44

    You must call removeView() on the child's parent first解决办法

    出现这样的情况最多是发生在recyclerView中,holder复用的过程中,多次添加view,第一次添加的时候view有了父类了,可能就是复用引起的。 我是发生在给recyclerView添加广告view的时候发生的。

  • 2020-02-11 17:43:35

    基于VCamera,仿微信录制短视频

    vcamera.so这个确实挺好用,可定制性也挺高,但是确定也不小,需要引入的这个so包,10M啊。对于安装包苛刻的用户,这是致命啊。 我现在是抛弃他了。但是在这里还是记录一下用法吧。防止以后再用他。

  • 2020-02-13 13:37:53

    mysql随机排序

    首页热门栏目需要随机显示几条信息