Android-Sqlite

什么是Sqlite

小型的、可嵌入、开源的关系型数据库,效率高,无数据类型,支持事务操作,程序驱动。

  • 跨平台的磁盘文件
  • 代码量少
  • api简单易用

1. sqlite数据库支持的数据类型

Integer、varchar(10)、float、double、char(10)、text

2. sql语句回顾

2.1. 创建表

create table 表名(字段名称 数据类型 约束, 字段类型,数据类型 约束...)
create table person(_id Integer primary key, name varchar(10), age Integer not null)

2.2 删除表

drop table 表名
drop table person

2.3 插入数据

insert into 表名[字段,字段] values(1,值2insert into person(_id, age) values(1, 20)
insert into values(2, "zs", 30)

2.4 修改数据

update 表名 set 字段=新值 where 修改的条件
update person set name="ls", age = 20, where _id = 1

2.5 删除数据

delete from 表名 where 删除的条件
delete from person from where _id = 2

2.6 查询语句

select 字段名 from 表名 where 查询条件 group by 分组的字段 having 筛选条件 order by 排序字段
select * from person;

select _id, name from person
select * from person where _id = 1
select * from person where _id <> 1
select * from person where _id = 1 and age > 18
select * from person where name like "%小%"
select * from person where name like "_小%"
select * from person where name is null 
select * from person where name age between 10 and 20
select * from person where age > 18 order by _id

Sqlite 数据库创建

  • SQLiteOpenHelper: 帮助类
  • onCreate(): 创建方法
  • onUpdate(): 数据库升级方法
  • onOpen(): 打开数据库方法

1. 主界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="18dp" android:paddingRight="18dp"
    android:paddingLeft="40dp" android:paddingTop="50dp"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建数据库"
        android:onClick="createDb"
        android:background="@android:color/holo_blue_dark"/>
    <Button
        android:id="@+id/btn_insert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="插入数据"
        android:onClick="click"
        android:background="@android:color/holo_blue_dark"
        android:layout_marginTop="20dp"/>
    <Button
        android:id="@+id/btn_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改数据"
        android:onClick="click"
        android:layout_marginTop="20dp"
        android:background="@android:color/holo_blue_dark"/>
    <Button
        android:id="@+id/btn_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除数据"
        android:onClick="click"
        android:background="@android:color/holo_blue_dark"
        android:layout_marginTop="20dp"/>
    <Button
        android:id="@+id/btn_insertApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="插入数据API"
        android:onClick="onClick"
        android:background="@android:color/holo_blue_dark"
        android:layout_marginTop="20dp"/>
    <Button
        android:id="@+id/btn_updateApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改数据API"
        android:onClick="onClick"
        android:background="@android:color/holo_blue_dark"
        android:layout_marginTop="20dp"/>
</LinearLayout>

2. 实现MySqliteHelper并继承自SQLiteOpenHelper

/**
 * 1. 提供了onCreate() onUpgrade()等创建数据库更新数据库的方法
 * 2. 提供了获取数据库对象的函数
 */
public class MySqlitHelper extends SQLiteOpenHelper {

    /**
     * 构造函数
     * @param context 上下文对象
     * @param name  当前创建数据库的名称
     * @param factory 游标工厂
     * @param version 表示创建的数据库的版本 >= 1
     */
    public MySqlitHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public MySqlitHelper(Context context) {
        super(context, Constant.DATABASE_NAME, null, Constant.DATABASE_VERSION);
    }

    /**
     * 当数据库创建时回调的函数
     * @param db 数据库对象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i("tag", "--------onCreate--------");
        String sql = "create table " + Constant.TABLE_NAME + "(" + Constant._ID +
                " Integer primary key, " + Constant.NAME + " varchar(10), " + Constant.AGE +" Integer)";
        db.execSQL(sql);
    }

    /**
     * 当数据库版本更新时回调的函数
     * @param sqLiteDatabase 数据库对象
     * @param i 数据库旧版本
     * @param i1 数据库新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    /**
     * 当数据库打开时回调的函数
     * @param db
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        Log.i("tag:", "-----------onOpen-------------");
        super.onOpen(db);
    }
}

3. 定义DbManager类来管理数据库

/**
 * 主要是对数据库操作的工具类
 */
public class DbManager {
    private static MySqlitHelper helper;
    public static MySqlitHelper getInstance(Context context) {
        if (helper == null) {
            helper = new MySqlitHelper(context);
        }
        return helper;
    }

    /**
     * 根据sql语句在数据库中执行语句
     * @param db 数据库对象
     * @param sql sql语句
     */
    public static void execSQL(SQLiteDatabase db, String sql) {
        if (db != null) {
            if (sql != null && !"".equals(sql)) {
                db.execSQL(sql);
            }
        }
    }
}

4. 定义常量类来存储项目相关的常量

public class Constant {
    public static final String DATABASE_NAME = "info.db";
    public static final int DATABASE_VERSION = 1;
    public static final String TABLE_NAME = "person";
    public static final String _ID = "_id";
    public static final String NAME = "name";
    public static final String AGE = "age";
}

5. 在MainActivity中实现相关逻辑

package com.example.sqlitedemo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private MySqlitHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper = DbManager.getInstance(this);
    }
    /**
     * 点击按钮创建数据库
     */
    public void createDb(View view) {
        /**
         * 创建或打开数据库,如果数据不存在则创建数据库,如果数据存在则直接打开数据库
         * 默认情况下,两个函数都表示打开过着创建可读可写的数据库对象,如果磁盘已满或者是数据本身权限等情况下
         * getReadableDatabase()打开的是只读数据库
         */
        SQLiteDatabase db = helper.getWritableDatabase();
    }
    public void click(View view) {
        switch (view.getId()) {
            case R.id.btn_insert:
                SQLiteDatabase db = helper.getWritableDatabase();
                String sql = "insert into "+Constant.TABLE_NAME+" values(1, 'zhangsan', 20)";
                DbManager.execSQL(db, sql);
                String sql2 = "inert into "+Constant.TABLE_NAME+" values(2, 'lisi', 25)";
                DbManager.execSQL(db, sql2);
                db.close();
                break;
            case R.id.btn_update:
                db = helper.getWritableDatabase();
                String updateSql = "update person set name = 'xiaoming' where _id = 1";
                DbManager.execSQL(db, updateSql);
                db.close();
                break;
            case R.id.btn_delete:
                db = helper.getWritableDatabase();
                String delSql = "delete from person where _id = 2";
                DbManager.execSQL(db, delSql);
                db.close();
                break;
        }
    }

    public void onClick(View view) {
        SQLiteDatabase db = helper.getWritableDatabase();
        switch (view.getId()) {
            case R.id.btn_insertApi:
                /**
                 * insert(String table, String nullColumnHack, ContentValues values)
                 */
                ContentValues values = new ContentValues();
                values.put(Constant._ID, 3);
                values.put(Constant.NAME, "张三");
                values.put(Constant.AGE, 30);
                long result = db.insert(Constant.TABLE_NAME, null, values);
                if (result > 0) {
                    Toast.makeText(this, "插入数据成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "插入数据失败", Toast.LENGTH_SHORT).show();
                }
            case R.id.btn_updateApi:
                /**
                 * update(String table, ContentValues values, String whereClause, String[] whereArgs)
                 * 返回值表示修改的条数
                 */
                ContentValues cv = new ContentValues();
                cv.put(Constant.NAME, "小木"); // 需要修改的字段名称,修改后的字段值
                int count = db.update(Constant.TABLE_NAME, cv, "_id=?", new String[]{"3"});
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值