SQLite数据库

本文介绍了SQLite数据库的基本概念、特点及在Android平台上的应用方法。详细展示了如何通过DataHelper类创建数据库和表,以及如何使用DataTool类执行数据的增删改查操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库介绍:
数据库指的是以一定方式储存在起、能为多个用户共享、具 有尽可能小的冗余度、与应用程序彼此独立的数据集合。 简单 来说可视为电子化的文件柜——存储电子文件的处所,用户可 以对文件中的数据运行新增、截取、更新、删除等操作
数据库分类:
关系型数据库(主流)、对象型数据库、层次式数据库

常用关系型数据库
PC端:Oracle、MySQL、SQL Server、Access、DB2、Sybase
嵌入式\移动客户端:SQLite

SQLite数据库:
SQLite是一个轻量级的关系数据库。SQLite最初的设计目标 是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只 需要几百K的内存就够了,目前应用于Android、iOS、Windows Phone等智能手机。

结构化查询语言(英语:Structured Query Language,缩写: SQL),是一种特殊目的之编程语言,用于数据库中的标准数据查询语言。
基本SQL语句:
1、选择:select * from student where 范围

2、插入:insert into student(列名, 列名) values(列值, 列值)

3、删除:delete from student where 范围

4、更新:update student set 列名=列值 where 范围

5、查找:select * from student where 列名 like “%列值%”

6、排序:select * from student order by 列名, 列名

7、总数:select count as total count from student

8、求和:select sum(列名) as sum value from student

9、平均:select avg(列名) as avgvalue from student

10、最大:select max(列名) as maxvalue from student

11、最小:select min(列名) as misvalue from student

SQLiteDatabase:
Android 提供了SQLiteDatabase代表一个数据库, 一旦应用程 序获得了指定数据库的对象, 接下来可以通过SQLiteDatabase 对象来管理,操作数据库。

使用SQLiteDatabase进行数据操作的步骤如下 :
1.获取SQLiteDatabase的对象,它代表了与数据库连接
3.操作SQL语句的执行结果,比如用SimpleCursorAdapter封装cursor
4.关闭SQLiteDatabase,回收资源
SQLiteDatabase使用:

DataHelper类:

public class DataHelper extends SQLiteOpenHelper{
//设置数据库的名字
    private  static final  String NAME = "demo.db";
    //设置版本号
    private  static final  int VERSION = 1;
    public DataHelper(Context context) {
        //参数二 数据库文件的名字
        //参数四 数据库版本
        super(context, NAME, null, VERSION);
    }
    //创建该数据库文件时会被调用
    //如果数据库文件存在的情况向不会执行该方法
    //一般再次方法中创建表
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sqlCreateTable = "create table person (_id integer primary key autoincrement," +
                "name text,age integer,height integer);";
        //方法参数中填入SQL语句
        sqLiteDatabase.execSQL(sqlCreateTable);
    }

   //版本更新执行的方法
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

Person类(数据类):

public class Person {
    private String name;
    private int age;
    private int height;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}

DataTool类:

public class DataTool {
    private DataHelper helper;

    public DataTool(Context context) {
        //构造方法里初始化数据库的类
        helper = new DataHelper(context);
    }

    //用来插入一条数据
    //如果插入的数据是text类型,则需要加上"",使用转义符\添加
    public void insert(Person p) {
        String sqInsert = "insert into person (name,age,height) values (\"" +
                p.getName() + "\"," + p.getAge() + "," + p.getHeight() + ");";
        //通过帮助类获取到可写的数据库对象
        SQLiteDatabase db = helper.getWritableDatabase();
        //执行SQL语句
        db.execSQL(sqInsert);
        //数据库使用完需要关闭
        db.close();
    }

    //第二种插入数据的方式
    public void _insert(Person p) {
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        //将数据存入到values里面
        //以KV的形式
        //K 为对应的列名  V为对应的值
        values.put("name", p.getName());
        values.put("age", p.getAge());
        values.put("height", p.getHeight());
        //调用db的插入方法
        db.insert("person", null, values);
        //关闭数据库
        db.close();
    }


    public void insert(List<Person> persons) {
        //增强for循环,for 循环的另一种形式
        for (Person person : persons) {
            _insert(person);

        }
    }

    public void delete() {
        String sqlDelete = "delete from person ;";
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(sqlDelete);
        db.close();
    }

    public void _delete() {
        SQLiteDatabase db = helper.getWritableDatabase();
        //参数一 表名  参数二 条件
        String whereClouse = "age > ? and height < ? ";
        String[] whereArgs = {"20", "190"};
        db.delete("person", whereClouse, whereArgs);
        db.close();
    }

    public void update(){
        String sqlUpdate = "update set person(name = \"孙悟饭\") where (age = 20)";
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(sqlUpdate);
        db.close();
    }

    public  void _update(){
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values  = new ContentValues();
        //要修改什么, 就把什么值放到values里面
        values.put("name","贝吉塔");
        values.put("height",175);
        String whereClause = "age = ?";
        String[] whereArgs = {"25"};
        db.update("person",values,whereClause,whereArgs);
        db.close();
    }

    //查询
    public Cursor query(){
        String sqlQuery = "select * from person;";
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor = db.rawQuery(sqlQuery,null);
        return cursor;
    }

    public List<Person> _query(){
//设置数据库库可写
        SQLiteDatabase db = helper.getWritableDatabase();
        /*
        参数一:表名
        参数二:想要查找出列的数组
        参数三/四:查询条件
        参数五/六:填null
        参数七:根据哪列排序的列名,如果按正序排列直接填列名,按倒序在列名后面加上**空格**desc
         */
        String [] columns = {"name"+"age"};
        List<Person> persons = new ArrayList<>();
        Cursor c = db.query("person",null,null,null,null,null,null);
        if (c != null && c.moveToFirst()){
            int indexName = c.getColumnIndex("name");
            int indexAge = c.getColumnIndex("age");
            int indexHeight = c.getColumnIndex("height");
            do {
                String name = c.getString(indexName);
                int age  = c.getInt(indexAge);
                int height  = c.getInt(indexHeight);
                Person p = new Person();
                p.setName(name);
                p.setAge(age);
                p.setHeight(height);
                persons.add(p);
            }while (c.moveToNext());
            c.close();
        }
        return persons;
    }

}

MainActivity:


public class MainActivity extends AppCompatActivity {
    private List<Person> personList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        personList = new ArrayList<>();
//创建DataTool对象
        DataTool tool = new DataTool(this);
        for (int i = 0; i < 10; i++) {
            Person p = new Person();
            p.setName("Tom" + i);
            p.setAge(25 + i);
            p.setHeight(180 + i);
            //向数据库插入数据
            tool.insert(p);
        }

        Cursor cursor = tool.query();
        if (cursor == null) {
            //如果为空做一些操作
log.d("MainActivity","数据库为空");
        } else if (!cursor.moveToFirst()) {
            //如果不能移动到首行,做一些操作
            //说明读出来的Cursor不是null,但是是空
log.d("MainActivity","数据库的游标不在首行");
        } else {
            //说明可以读出来数据,确定某一列是第几列
            int indexName = cursor.getColumnIndex("name");
            int indexAge = cursor.getColumnIndex("age");
            int indexHeight = cursor.getColumnIndex("height");

            do {
                //开始读数据
                String name = cursor.getString(indexName);
                int age = cursor.getInt(indexAge);
                int height = cursor.getInt(indexHeight);
                Person p = new Person();
                p.setName(name);
                p.setAge(age);
                p.setHeight(height);
                personList.add(p);
                //游标移动到下一行
            }while (cursor.moveToNext());
        }
        //游标也需要关闭
        cursor.close();
//查看数据库中有多少条
        Log.d("MainActivity", "personList.size():" + personList.size());
//获取数据库中有多少条
        personList = tool._query();
        Log.d("MainActivity", "personList:" + personList.size());
    }
}

我们可以看到控制台输出:

这里写图片描述

以上就是对SQLite数据库的简单使用,后面我们还会介绍更为简洁的、更为好用的数据库框架,

本人菜鸟一个,有什么不对的地方,希望大家指出评论,大神勿喷!希望大家一起学习进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值