SQLite

SQLite

什么是SQLite

SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百KB的内存就足够了
SQLite不仅支持标准的SQL语法,还遵循了数据库的ACID事务
它甚至还不需要设置用户名和密码就可以使用

为什么要用SQLite

因为前面所学的SharedPreferences存储只适用于保存一些简单的数据和键值对,当需要存储大量复杂的关系型数据时,SharedPreferences存储就难以应付了,这时就需要用Android系统内置的SQLite数据库

如何创建数据库和数据表

首先你需要创建一个类继承SQLiteOpenHelper()抽象类
并继承它的构造方法
这个构造方法有4个参数:
第一个参数是Context,这个就不解释了
第二个参数是数据库名,创建数据库时就是使用这里指定的名称
第三个参数允许我们在查询数据时返回一个自定义的Cursor,一般传入null
第四个参数表示当前数据库版本号

public class MysqliteHelper extends SQLiteOpenHelper{

    public MysqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

构建好SQLiteOpenHelper实例后,再调用它的getReadableDatabase()或getWritableDatabase()方法就能创建数据库了
这里提一下getReadableDatabase()方法是只能读取数据,而不能写入数据,也就是无法更新数据库

MysqliteHelper mysqliteHelper=new MysqliteHelper(this,"students_db",null,1);
        SQLiteDatabase sqLiteDatabase=mysqliteHelper.getWritableDatabase();

建表语言
解释一下:比如,下面的 name text,name是数据库的列名,text是该列数据的数据类型,特别注意中间要用空格隔开,且每一列之间要用逗号隔开
再说一下数据类型:integer表示整型,real表示浮点类型,text表示文本类型,blob表示二进制类型,下面还用到了primary key将id设为主键,并用autoincrement和not null表示id列是自增长和不为空的

String sql="create table students(" +
            "id integer primary key autoincrement not null," +
            "name text," +
            "age integer" +
            ")";

建表语句是写在上面的MysqliteHelper类中的,并且再onCreate()中调用SQLiteDatabase的execSQL()方法执行建表语句

修改如下:

public class MysqliteHelper extends SQLiteOpenHelper{
    String sql="create table students(" +
            "id integer primary key autoincrement not null," +
            "name text," +
            "age integer" +
            ")";

    public MysqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

如何添加数据

Avtivity的Java代码:

private void addStudent() {
        //获取输入的数据
        String name=nameET.getText().toString();
        int age=Integer.parseInt(ageET.getText().toString());

        //将数据存入ContentValues对象中
        ContentValues values=new ContentValues();
        //"name"要和建表语句中的列名相同
        values.put("name",name);
        values.put("age",age);

        //创建名为students_db的数据库
        MysqliteHelper mysqliteHelper=new MysqliteHelper(this,"students_db",null,1);
       //调用getWritableDatabase()方法
        SQLiteDatabase sqLiteDatabase=mysqliteHelper.getWritableDatabase();
        //将数据添加进数据表内
        sqLiteDatabase.insert("students",null,values);
    }
注意:上面最后一行代码中”students”要和你的建表语句中表名相同

如何修改数据

这里我就讲一下update()语句中相关参数,第一和第二个就不用说了,主要说一下第三和第四个

第三个参数表示的是修改数据的条件,”列名=?”,条件是可以写多个的,中间用and连接,这里的问号就是第四个参数

第四个参数,因为前面的条件可以写多个,所以第四个参数是一个字符串数组

 private void changeStudents() {
        String name=nameET.getText().toString();
        String age=ageET.getText().toString();

        MysqliteHelper mysqliteHelper=new MysqliteHelper(this,"students_db",null,1);
        SQLiteDatabase sqLiteDatabase=mysqliteHelper.getWritableDatabase();

        ContentValues values=new ContentValues();
        values.put("name","XXX");

        sqLiteDatabase.update("students",values,"name=?",new String[]{name});

    }

如何删除数据

删除和修改基本是一样的,这里就不多讲解了

private void delStudents() {
        String name=nameET.getText().toString();
        String age=ageET.getText().toString();

        MysqliteHelper mysqliteHelper=new MysqliteHelper(this,"students_db",null,1);
        SQLiteDatabase sqLiteDatabase=mysqliteHelper.getWritableDatabase();

        sqLiteDatabase.delete("students","name=?",new String[]{name});
    }

如何查询数据

用一个循环通过Cursor游标获取数据库中数据

private void listStudent() {
        MysqliteHelper mysqliteHelper=new MysqliteHelper(this,"students_db",null,1);
        SQLiteDatabase sqLiteDatabase=mysqliteHelper.getWritableDatabase();

        Cursor cursor=sqLiteDatabase.query("students",null,null,null,null,null,null);
        cursor.moveToFirst();
        do{
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            int age=cursor.getInt(cursor.getColumnIndex("age"));
            String name=cursor.getString(cursor.getColumnIndex("name"));
        }while (cursor.moveToNext());

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值