SQLite数据库的使用之使用内置函数

原创 2016年08月31日 16:23:09

光会使用SQL语句来操作数据库是完全不够的,虽然看起来非常的极客范,但是你想想,万一少打一个空格,那你的程序就直接GG了,所以接下来学习的使用SQLitedatabase类的内置函数就非常关键了。


数据库创建的

数据库的创建和之前还是一样的,这个没法用内置函数来创建。

 SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null);
        db.execSQL("create table if not exists stutb(_id integer primary key autoincrement," +
                "name text not null," +
                "sex text not null," +
                "age integer not null)");

使用ContentValues操作数据

在查看内置函数的文档时,你会发现每个函数的参数都有一个ContentValues,这是什么呢?

This class is used to store a set of values that the ContentResolver can process.

ContentValues的文档里这么写到,意思是只有用这个类来储存一组值时,ContentResolver才能处理。目前我把它看作一个Hashmap,以键值对的形式存储,可以直接new出对象。

 ContentValues values = new ContentValues();//暂时理解为一个hashmap
        values.put("name","张三");
        values.put("sex","男");
        values.put("age",18);

插入数据库

插入数据库直接用long rowId=db.insert(TABLENAME, null, values); 第一个参数不用说,第二个参数不用管,第三个参数就是我们刚刚创建的ContentValues。它会返回一个long型的id。
注意的是values使用过后如果还想继续插入,必须要values.clear()

那么我们再多插入几个数据

values.clear();//记得清空
        values.put("name","李四");
        values.put("sex","男");
        values.put("age",29);
        db.insert(TABLENAME, null, values);

        values.clear();//记得清空
        values.put("name","李无");
        values.put("sex","男");
        values.put("age",39);
        db.insert(TABLENAME, null, values);

        values.clear();//记得清空
        values.put("name","李撒旦");
        values.put("sex","男");
        values.put("age",39);
        db.insert(TABLENAME, null, values);

        values.clear();//记得清空
        values.put("name","李打撒");
        values.put("sex","男");
        values.put("age",99);
        db.insert(TABLENAME, null, values);

        values.clear();

这样我们的数据库就有5条数据了


更新与删除

那么想在如果我想把所有id>3的数据的性别全部改为女怎么办呢?
使用内置函数的update方法,并且我们刚刚说到使用内置函数操作数据库必定绕不开ContentValues。

 values.put("sex","女");
 db.update(TABLENAME, values, "_id>?", new String[]{"3"});

在values中放置我们想要修改的键值,传入update函数,第三个参数用“?”表示占位,具体的值在第四个参数上填上,第四个参数必须是字符串数组。
那么接下来我想要删除名字里有”打”的数据,毫无疑问调用delete函数

db.delete(TABLENAME, "name like ?", new String[]{"%打%"});

用法与更新差不多


查找操作

查找操作稍微繁琐一点,调用query函数返回Cursor对象

        Cursor cursor=db.query(TABLENAME, null, "_id > ?", new String[]{"0"},null,null,"name");//最后一个排序
// 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象  
            // 第一个参数String:表名  
            // 第二个参数String[]:要查询的列名  
            // 第三个参数String:查询条件  
            // 第四个参数String[]:查询条件的参数  
            // 第五个参数String:对查询的结果进行分组  
            // 第六个参数String:对分组的结果进行限制  
            // 第七个参数String:对查询的结果进行排序  

参数看起来很多吧!其实我们就用到其中的几个参数而已,第三个第四个参数组成查找条件,这里我们查找所有的数据,最后一个参数为“orderBy”即排序方法,我们按名字排序。
返回一个cursor对象我们这里还是先检查是否为空

if (cursor != null) {
            String[] columns = cursor.getColumnNames();
            while (cursor.moveToNext()) {
                for (String name : columns
                        ) {
                    Log.d("info", name+"为");
                    Log.d("info", " 查询到"+cursor.getString(cursor.getColumnIndex(name)));

                }
            }
            cursor.close();
        }

接着我们用一个字符串数组把所有列的名字全部保存起来,使用cursor.getColumnNames(); 即可得到所有列的名字,接下来就移动游标,游标指定了行,使用getColumnIndex 来确定该列的数据。


最后要记得关闭我们的游标和数据库。


SQLiteOpenHelper的使用

SQLiteOpenHelper是一个帮助类,是一个抽象类,因此必须要自己新建一个类去继承他,需要重写里面的方法

 @Override //首次建库是使用,可以把建库建表操作放在里面
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table if not exists studb(_id integer primary key autoincrement ," +
                "name text not null," +
                "sex text not null," +
                "age integer not null)");
        db.execSQL("insert into studb(name,age,sex) values('张三',18,'男')");
    }
 @Override//当数据库的版本发生变化的时候 会自动执行
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

新建好这个类后,我们就可以在其他类中使用了,先new 一个helper对象,传入当前上下文以及数据库名,接着调用getWritableDatabase方法就会返回一个数据库,那么接下来的操作就和以前一样了。

 DBOpenHelper helper = new DBOpenHelper(MainActivity.this, "stu.db");
        SQLiteDatabase db = helper.getWritableDatabase();//read 只读
        Cursor cursor = db.rawQuery("select * from studb",null);
        if (cursor != null) {
            String[] cols = cursor.getColumnNames();
            while (cursor.moveToNext()) {
                for (String name:cols
                     ) {
                    Log.d("info", cursor.getString(cursor.getColumnIndex(name)));
                }
            }
            cursor.close();
        }
        db.close();
版权声明:本文为博主原创文章,未经博主允许不得转载。

SQLite 函数大集合(一)

——— 核心函数————–abs(x)abs函数会尝试将当前字段值转换成整型,再取绝对值。abs(x)的返回值有以下几种情况: x值为正值和0,abs(x)函数返回x本身。 x为负值,abs(x)函数...
  • u011665766
  • u011665766
  • 2016年01月15日 12:37
  • 382

SQLite教程(内置日期和时间函数)

SQLite教程: 1. 特殊数据的存储(日期和时间数据类型,布尔类型) 1.内置函数之时间和日期函数的使用...
  • hexingen
  • hexingen
  • 2017年05月10日 19:53
  • 2824

Java 中的 static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值。如: public class HelloWorld { String name; // 声明变量name String sex; ...
  • liushulin183
  • liushulin183
  • 2015年06月27日 11:06
  • 528

SQLite使用内置函数操作数据库

MainActivity.classpackage com.superxingyun.sqlite_2;import android.content.ContentValues; import and...
  • qq_31568297
  • qq_31568297
  • 2016年09月02日 12:06
  • 160

SQLite在Android中使用注意事项

1、模糊查询的陷阱 cursor = db.rawQuery("select * from song where song_title like '?%' ", selectionArgs);  ...
  • qjbagu
  • qjbagu
  • 2014年07月03日 20:00
  • 800

嵌入式数据库 SQLite 浅析

SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共...
  • zqixiao_09
  • zqixiao_09
  • 2016年01月16日 14:54
  • 4206

Android SQLite数据库的详细使用

SQLite 简介SQLite 是一款内置到移动设备上的轻量型的数据库,是遵守ACID(原子性、一致性、隔离性、持久性)的关联式数据库管理系统,多用于嵌入式系统中SQLite 数据库是无类型的,可以向...
  • axi295309066
  • axi295309066
  • 2016年09月27日 00:44
  • 1058

C# 程序中使用 SQLite 数据库

C# 程序中使用 SQLite 数据库 2010-05-06 — Unmi 差不多在 3 年前我就关注过 SQLite,也整理了一篇 SQLite 的介绍:开源嵌入式数据库 SQLite 简...
  • e_wsq
  • e_wsq
  • 2012年02月04日 18:48
  • 1181

在 Android 应用程序中使用 SQLite 数据库以及怎么用

在 Android 应用程序中使用 SQLite 数据库以及怎么用....如果你想要开发 Android 应用程序,一定需要在 Android 上存储数据,使用 SQLite 数据库是一种非常好的选择...
  • zhuangyalei
  • zhuangyalei
  • 2014年07月24日 11:26
  • 2578

学习笔记:Android SQLite,并实现SQLite基本CRUD操作的Demo

一、背景       Android系统内置有SQLite,用户可以在本地存放大量较为复杂的关系型数据,相较于File操作和SharedPreferences只能存放简单的数据,SQLite具有更大的...
  • jinxin_cuit
  • jinxin_cuit
  • 2016年09月21日 15:35
  • 1037
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQLite数据库的使用之使用内置函数
举报原因:
原因补充:

(最多只允许输入30个字)