【SQLite数据库】的使用

本文详细介绍了SQLite数据库的基础知识,包括与MySQL的比较、基本命令用法(如创建数据库、表、插入数据等)、以及通过C接口进行数据库编程的实验示例。
摘要由CSDN通过智能技术生成

SQLite数据库

0、linux基础知识补充

  • cd -:回到上一成执行目录

  • .configure:是配置的意思

  • >>>.table     -- 查看数据库中的表
    >>>.databases -- 列出当前打开的数据库
    >>>.databases -- 列出当前打开的数据库
    >>>.quit      -- 数据库退出
    

1、SQLite简介

  • 轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备,更加复杂
  • SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作为 应用程序的一部分运行。
  • MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。

1.1 SQLite & MySQL 的优缺点比较

SQLite优点SQLite缺点MySQL优点MySQL缺点
1、基于文件,易于使用1、功能欠缺:用户管理、安全功能1、功能多1、复杂一点,需要技术专业知识来识别
2、与SQL类似,微小更改2、不易扩展,不适合大数据库、2、易于扩展适用于大模型2、与传统SQL语法略有不同
3、适合基础开发3、无法定制3、速度块

1.2 常见的嵌入式数据库

在这里插入图片描述

2、数据库的基本命令和用法

2.1 创建数据库

-- 打开方式一
sqlite3     	-- 进入数据库
>>>.open test.db    -- 打开数据库
>>>.quit
-- 数据库退出后在命令当前路径创建数据库test.db

-- 打开方式二
sqlite3 test.db -- 在命令运行当前窗口创建数据库test.db
-- 在数据库命令下
>>>.databases   -- 列出当前打开的数据库
>>>.quit        -- 退出
打开方式一
在这里插入图片描述
打开方式二
在这里插入图片描述

2.2 创建一张表格

create table stu2(id Integer,name char,score Integer); -- Integer整数

2.3 插入一条数据

insert into stu values(001,'tp',99);
insert into stu2 values(002,"s",100);       -- ''和""都行
insert into stu(name,score) values("张三",98); -- 插入部分字段内容

2.4 增加一列

alter table stu add column sex char; -- 增加了性别一栏

2.5 删

-- 删除一条数据
delete from stu where id = 002;
-- 删除一张表
drop table stu

2.6 改

update stu set name = 'tp' where id = 000;

2.7 查看数据库

select * from stu;          -- 查询所有字段的结果
select name,score from stu; -- 查询数据库中部分字段的内容

3、数据库编程

3.1 实验1:打开/创建数据库C接口

下面的 C 代码段显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将 返回一个数据库对象。

//opensqlite.c
#include <stdio.h>
#include <sqlite3.h>
int main(char argc, char **argv)
{
    sqlite3 *db;
    int ret;
    if(argc < 2)
    {
        printf("Usage: %s xxx.db\n",argv[0]);
        return -1;
    }
    //sqlite3_open(const char *filename, sqlite3 **ppDb)
    //第一个参数filename:要打开或创建的数据库文件的名称。如果文件不存在,SQLite 将尝试创建一个新的数据库文件
    //用于存储指向打开的数据库连接的指针的指针
    if( (ret = sqlite3_open(argv[1],&db)) == SQLITE_OK)
    {
        printf("open %s success\n",argv[1]);
    }
    else
    {
        //const char *sqlite3_errmsg(sqlite3*);
        //sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.
        printf("error:%s,%d",sqlite3_errmsg(db),ret);
        if(ret = SQLITE_PERM)
        {
            printf("permission no\n");
        }
        return -1;
    }
    //sqlite3_close(sqlite3*)
    //该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。
    //如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。
    sqlite3_close(db);
    printf("done\n");
    return 0;
}
实验1 打开/创建数据库C接口 结果
在这里插入图片描述

3.2 实验2:创建表的C接口

  • 下面的 C 代码段将用于在先前创建的数据库中创建一个表:

  • 几个API

3.2.1 callback()
  • callback(void *arg, int column_size, char *column_value[], char *column_name[])
        //void *arg:是sqlite3_exec函数的第四个参数
        //colunm_size 表示数据库的数据库中的字段(Field),每个字段对应表中的一个列,一个表有几列就是几;
        //column_value[]:列的值
        //column_name:字段名字
    
3.2.2 sqlite_open()
  • sqlite3_open(const char *filename, sqlite3 **ppDb)
        //第一个参数filename:要打开或创建的数据库文件的名称。如果文件不存在,SQLite 将尝试创建一个新的数据库文件
        //用于存储指向打开的数据库连接的指针的指针
    
3.2.3 sqlite_exec()
  • sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg)
            //第二个参数sql:要执行的 SQL 查询语句,可以包含单个或多个 SQL 语句,每条语句以分号结束。
            //第三个参数是一个回调函数callback,用于处理查询结果的每一行数据;
            //第四个参数data作为回调函数callback的第一个参数 void *arg; 
            //第五个参数errmsg将被返回用来获取程序生成的任何错误。
            //int callback(void *arg, int column_size, char *column_value[], char*column_name[])
        	//sqlite3_exec返回值为 0 时,表示操作成功完成
    
3.2.4 实验2
//creatSqlite.c
#include <stdio.h>
#include <sqlite3.h>
// int callback(void *arg, int column_size, char *column_value[], char*column_name[])

int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
    printf("arg = %s\n",(char *)arg);
    //void *arg:是sqlite3_exec函数的第四个参数
    //colunm_size 表示数据库的数据库中的字段(Field),每个字段对应表中的一个列,一个表有几列就是几;
    //column_value[]:列的值
    //column_name:字段名字
    for(int i = 0; i<column_size; i++)
    {
        printf("%s = %s\n",column_name[i],column_value[i]);
    }
    printf("======================================\n");
    return 0;//必须返回0,这样数据库中有多少条数据,这个回调函数就会被调用多少次
}
int main(char argc, char **argv)
{
    sqlite3 *db;
    char *errorMes = NULL;
    int ret;
    if(argc < 2)
    {
        printf("Usage: %s xxx.db\n",argv[0]);
        return -1;
    }
    //sqlite3_open(const char *filename, sqlite3 **ppDb)
    //第一个参数filename:要打开或创建的数据库文件的名称。如果文件不存在,SQLite 将尝试创建一个新的数据库文件
    //用于存储指向打开的数据库连接的指针的指针
    if( (ret = sqlite3_open(argv[1],&db))==SQLITE_OK)
    {
        printf("open %s success\n",argv[1]);
    }
    else
    {
        //const char *sqlite3_errmsg(sqlite3*);
        //sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.
        printf("error:%s,%d",sqlite3_errmsg(db),ret);
        if(ret = SQLITE_PERM)
        {
            printf("permission no\n");
        }
        return -1;
    }

    // sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg)
        //第二个参数sql:要执行的 SQL 查询语句,可以包含单个或多个 SQL 语句,每条语句以分号结束。
        //第三个参数是一个回调函数callback,用于处理查询结果的每一行数据;
        //第四个参数data作为回调函数callback的第一个参数 void *arg; 
        //第五个参数errmsg将被返回用来获取程序生成的任何错误。
        //int callback(void *arg, int column_size, char *column_value[], char*column_name[])
    	//sqlite3_exec返回值为 0 时,表示操作成功完成
    ret = sqlite3_exec(db,"create table Class03(id Integer,name char,score Integer);",\
            callback,"content of sql:",&errorMes); //errorMes may sigment error
    if(ret != SQLITE_OK)
    //SQLITE_OK 是 SQLite 中的一个宏定义,表示操作成功完成的返回代码。
    //在 SQLite 中,每个操作都会返回一个特定的返回代码,用于指示操作的结果。
    //SQLITE_OK 代表操作成功完成,没有发生错误。
    {
        printf("creat tables error:%s\n",errorMes);//如果已经创建,会有errorMes提示
    }

    printf("go ahead\n");
    ret = sqlite3_exec(db,"insert into Class03 values(002,'kkkk',99);",\
            callback,"content of sql:",&errorMes); //errorMes may sigment error
    printf("insert:%d,%s\n",ret,errorMes);//会有errorMes提示

    ret = sqlite3_exec(db,"select * from Class03;",\
            callback,"content of sql:",&errorMes); //errorMes may sigment error
    printf("select:%d,%s\n",ret,errorMes);//会有errorMes提示

    //sqlite3_close(sqlite3*)
    sqlite3_close(db);
    //该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。
    //如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。
    printf("done\n");
    return 0;
}
  • 相当于执行了
sqlite3 test2.db
>>>create table Class03(id Integer,name char,score Integer);
>>>insert into Class03 values(002,'kkkk',99);
>>>select * from Class03;

可以通过修改sqlite3_exec()函数中第二个参数,在sqlite3 里面运行不同数据库指令

  • 实验2结果

在这里插入图片描述



欢迎大家一起交流讨论!

  • 43
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android中的SQLite数据库是一种轻量级的数据库,它可以在Android应用程序中存储和检索数据。SQLite数据库使用SQL语言来管理数据,可以在Android应用程序中创建、读取、更新和删除数据。使用SQLite数据库可以使应用程序更加高效和可靠,因为它可以在本地存储数据,而不需要访问网络。在Android中使用SQLite数据库需要使用SQLiteOpenHelper类来创建和管理数据库SQLiteOpenHelper类提供了一些方法来创建和升级数据库,以及插入、查询、更新和删除数据。在使用SQLite数据库时,需要注意数据类型、表结构、SQL语句等方面的问题,以确保数据的正确性和完整性。 ### 回答2: Android平台经常使用SQLite数据库来存储和管理本地数据。在本文中,我们将讨论如何在Android中使用SQLite数据库。 首先,在Android中使用SQLite数据库,我们需要创建一个SQLiteOpenHelper类。这个类用于创建和升级数据库。它包含了两个重要的方法:onCreate()和onUpgrade()。onCreate()方法将在首次创建数据库时被调用。onUpgrade()方法将在升级数据库时被调用。我们可以在这个类中定义表名,列名,数据库版本号和其他数据库相关信息。 接下来,在我们使用数据库前,需要实例化一个SQLiteOpenHelper类对象。这个对象用于打开或创建数据库。我们可以使用getReadableDatabase()和getWritableDatabase()方法来获取一个可读/写的数据库对象。 在获取数据库对象后,我们可以执行SQL命令来操作数据库。我们可以使用execSQL()方法来执行SQL命令。我们可以使用insert()、update()和delete()方法来执行增、删、改操作。我们可以使用rawQuery()方法来执行查询操作。 SQLiteOpenHelper类和SQLiteDatabase类并不是线程安全的。因此我们需要确保在使用时进行同步操作。我们可以使用synchronized关键字来达到同步效果。 在Android中,许多第三方的开源框架,如OrmLite、GreenDao和Realm等,提供了ORM(对象关系映射)的功能,使得数据库的操作更加简单和便捷。 总的来说,在Android中使用SQLite数据库可以轻松地存储和管理本地数据。SQLiteOpenHelper和SQLiteDatabase提供了丰富的API来操作数据库。ORM框架为我们提供了更加简便的数据库操作方式。因此,掌握Android中SQLite数据库使用非常重要。 ### 回答3: Android SQLite数据库是Android开发中最常用的数据库之一,它是一个基于文件的嵌入式关系数据库管理系统。SQLite在设计时考虑到了资源占用和运行效率,所以非常适合在移动设备上使用。下面将详细介绍如何使用Android SQLite数据库。 1. 创建数据库 首先需要创建一个SQLite数据库,通过SQLiteOpenHelper类来创建,传入的参数主要是数据库版本号和数据库名称。在SQLiteOpenHelper的子类中重写onCreate方法来创建表格和一些初始化操作。 2. 执行SQL语句 在SQLiteOpenHelper的子类中重写onUpgrade方法来执行升级操作,可以通过执行ALTER TABLE语句来修改表格结构,并通过DROP TABLE语句删除表格。除此之外,在应用中也可以通过SQLiteDataBase对象的execSQL方法来执行SQL语句,如插入、删除或修改数据等。 3. 增删改查操作 增加(insert):通过SQLiteDataBase对象的insert方法来实现,在方法中传入表名和map对象,map对象中存储数据的键值对。 删除(delete):同样通过SQLiteDataBase对象的delete方法来实现,传入表名和删除条件。 修改(update):也是通过SQLiteDataBase对象的update方法来实现,同时传入修改的数据及条件。 查询(query):同样通过SQLiteDataBase对象的query方法来实现,传入要查询的表名、查询的列、查询条件等参数即可。 4. 事务操作 SQlite数据库支持事务操作,可以在一组操作中,只要有一个操作出现问题,就可以将之前的操作全部回滚,以保证数据的完整性和一致性。 以上就是android-sqlite数据库使用方法,当然还有很多细节需要注意,例如:表格的设计、SQL语句的优化等。熟练掌握SQLite使用,可以帮助开发者更好地管理应用数据,提高应用性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值