Linux下使用SQLite3基本功能
- 介绍
- 一、使用语句命令SQLite
* - 1、SQLite3 常见命令
- 2、创建一个数据库表
- 3、数据类型
- 4、插入一列表
- 5.0、显示数据
– - 6、修改数据
- 7、删除指定的数据列表
- 8、表名主键字段的关键字
- 9、删除一个数据库表
- 二、使用SQLite提供的API编写C
* - 1、int sqlite3_open()创建一个数据库表
- 2、int sqlite3_exec()写入操作数据库内的数据
- 3、sqlite3_get_table() 读取数据库内的数据
版权声明:
本文为
博主原创文章
,遵循 CC 4.0 BY-SA 版权协议
转载请附上原文出处链接和本声明
前言
为了便于更好阅读理解文章,在观看本文章之前,您需要了解什么是数据库,尤其是RDBMS,以及什么是计算机编程语言。
SQLite不需要实际的服务器来运行,应用程序无需与服务器通信到客户端/服务器架构,而是集成到SQLite中。
注意:SQLite不能很好地支持多个用户,如果有两个用户同时尝试写入,那么数据库将会被短暂锁定,功能受限。另外,SQLite不能处理一次大量数据,一旦超过最大容量,其性能将会降低。
; 介绍
什么是表:表是数据库最基本的组成对象,用来组织和存储数据。表由行和列组成,每个列包含特定类型的数据信息,一个列就是一个字段。一个数据库可以包含一个或多个表。
以excel为例:下面两张图分别代表了两种表(为表取了名字:学生信息、公民信息)
一个数据库可以包含一个或多个表
在Linux环境下使用SQLite3 创建了一个数据库,库内创建了一个表(学生信息)
下方写了详细的注释 >>> //注释
linux@ubuntu:~/SQL/第一个数据库$ ls
linux@ubuntu:~/SQL/第一个数据库$ sqlite3 我的一个数据库.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> create table 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite>
sqlite> .database
seq name file
0 main /home/linux/SQL/第一个数据库/我的一个数据库.d
sqlite>
sqlite>
sqlite> .tables
学生信息
sqlite>
sqlite>
sqlite> .schema
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite>
sqlite> .quit
linux@ubuntu:~/SQL/第一个数据库$ ls
我的一个数据库.db
一、使用语句命令SQLite
1、SQLite3 常见命令
.help :显示帮助信息
.quit :退出SQLite3
.database:显示当前打开的数据库文件
sqlite> .database
seq name file
0 main /home/linux/SQL/第一个数据库/我的一个数据库.d
.tables :显示数据库中所有的表名
sqlite> .tables
学生信息
.schema :查看表的结构
sqlite> .schema
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
2、创建一个数据库表
create table 表的名字(字段1名 其数据类型,字段2名 其数据类型,…);
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite> create table 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite> .schema
CREATE TABLE 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);
sqlite>
3、数据类型
; 4、插入一列表
Insert into 表的名字 values(参数1,参数2,…);
sqlite> insert into 学生信息 values(1,'小李','男',80);
sqlite>
sqlite> select * from 学生信息;
1|小李|男|80
5.0、显示数据
5.1、显示指定表的 全部数据
select 显示区域 from 要显示的表;
sqlite>
sqlite> select * from 学生信息;
1|小李|男|80
2|小王|男|70
3|小张|女|90
sqlite>
5.2、显示指定表的 指定数据
where指定从一个表或多个表中获取数据的条件
sqlite> select * from 学生信息 where 性别 = '女';
3|小张|女|90
sqlite>
sqlite> select * from 学生信息 where 成绩 >= 80;
1|小李|男|80
3|小张|女|90
sqlite>
6、修改数据
update 表名 set 需要修改的字段 = 修改值 where 指定要统一修改的列表;
sqlite> select * from 学生信息;
1|小李|男|80
2|小王|男|70
3|小张|女|90
sqlite>
sqlite> update 学生信息 set 成绩 = 100 where 姓名 = '小李';
sqlite>
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
3|小张|女|90
sqlite>
7、删除指定的数据列表
delete from 表名称 where 要删除列表中的任意一个字段;
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
3|小张|女|90
sqlite>
sqlite> delete from 学生信息 where 学号 = 3;
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
sqlite>
8、表名主键字段的关键字
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
2|小王|男|70
sqlite>
sqlite> delete from 学生信息 where 学号 = 2;
sqlite> select * from 学生信息;
1|小李|男|100
sqlite>
可以看到当存在相同内容的列表时,一旦删除其中一个另外一个也会一起删除
从根本上避免这个问题,设置一个不可重复的字段
当一个字段设置为 primary key时,表内同属字段的值就不能重复
sqlite> create table 学生信息(学号 integer primary key,姓名 text,性别 text,成绩 integer);
sqlite>
sqlite> insert into 学生信息 values(1,'小李','男',100);
sqlite> insert into 学生信息 values(1,'小王','男',70);
Error: UNIQUE constraint failed: 学生信息.学号
sqlite>
sqlite> select * from 学生信息;
1|小李|男|100
sqlite>
sqlite> insert into 学生信息 values(2,'小王','男',70);
sqlite> select * from 学生信息;
1|小李|男|100
2|小王|男|70
sqlite>
9、删除一个数据库表
drop table 要删除的表名;
sqlite> create table 学生信息(学号 integer ,姓名 text,性别 text,成绩 integer);
sqlite> create table 公民信息(姓名 text,性别 text,电话 integer,地址 text);
sqlite>
sqlite> .tables
公民信息 学生信息
sqlite>
sqlite> drop table 公民信息;
sqlite>
sqlite> .tables
学生信息
sqlite>
二、使用SQLite提供的API编写C
SQLite3数据库针对不同的语言提供了相应的编程接口
C语言 SQLite3数据库 相关库文件
#include
1、int sqlite3_open()创建一个数据库表
int sqlite3_open(const char *filename, sqlite3 **ppDb)
函数功能:
打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。
形参一:const char *filename
形参二: sqlite3 ppDb
返回参数**:
sqlite3 * sql_db;
char * errmsg;
if (SQLITE_OK != sqlite3_open("学生信息.db",&sql_db))
{
fprintf(stderr,"数据库打开失败\n%s\n",sqlite3_errmsg(sql_db));
return -1;
}
2、int sqlite3_exec()写入操作数据库内的数据
int sqlite3_exec(sqlite3 * db,const char * sql,int( callback)(void,int,char ,char ),void * arg,char ** errmsg)
函数功能:
一站式查询执行函数,使用该函数可以直接利用C代码实现SQLite3内,对其表、列表的 增删改查
形参一:sqlite3 * db
打开的数据库(数据库的地址)
形参二:const char * sql
SQLite 标准语句
形参三:int( callback)(void,int,char ,char )
回调函数
形参四:void * arg
给回调函数传递的第一个参数
形参五:char errmsg
获取错误信息存放的地址,内部存放的字符串即为错误信息;
出现错误信息后记得使用 ==sqlite3_free()==将其内存释放;
返回参数**:
成功返回 0
失败返回错误码
标准代码
sqlite3 * sql_db;
char * errmsg;
char * file_name = "学生信息.db";
if (SQLITE_OK != sqlite3_open(file_name ,&sql_db))
{
fprintf(stderr,"数据库打开失败\n%s\n",sqlite3_errmsg(sql_db));
return -1;
}
char * create_table = "insert into 学生信息 values(1,'小李','男',100);";
if (SQLITE_OK != sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg))
{
fprintf(stderr,"数据库操作错误\n%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
进阶代码
typedef struct
{
int id;
char * name;
char * gender;
int sock;
}student;
student S = {1,"小李","男",100};
sqlite3 * sql_db;
char * errmsg;
if (SQLITE_OK != sqlite3_open(file_name ,&sql_db))
{
fprintf(stderr,"数据库打开失败\n%s\n",sqlite3_errmsg(sql_db));
return -1;
}
char statement[1024] = {0};
sprintf(statement,"insert into 学生信息 values(%d,'%s','%s',%d);",S.id,S.name,S.gender,S.sock);
if (SQLITE_OK != sqlite3_exec(sql_db,statement,NULL,NULL,&errmsg))
{
fprintf(stderr,"数据库操作错误\n%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
sqlite3_exec 在数据库内创建一个表
char * create_table = "create table 学生信息(学号 integer,姓名 text,性别 text,成绩 integer);";
sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);
sqlite3_exec 插入一列表
char * create_table = "insert into 学生信息 values(1,'小李','男',80);";
sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);
sqlite3_exec 修改数据
char * create_table = "update 学生信息 set 成绩 = 100 where 姓名 = '小李';";
sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);
sqlite3_exec 删除指定的数据列表
char * create_table = "delete from 学生信息 where 学号 = 3;";
sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);
sqlite3_exec 删除一个数据库表
char * create_table = "drop table 学生信息;";
sqlite3_exec(sql_db,create_table,NULL,NULL,&errmsg);
3、sqlite3_get_table() 读取数据库内的数据
int sqlite3_get_table(sqlite3 * db,const char *zSql,char ***pazResult,int * pnRow,int * pnColumn,char ** pzErrmsg)
函数功能:
获取数据库内的数据:表的结构、表的内容、行、列
形参一:sqlite3 * db
打开的数据库(数据库的地址)
形参二:const char *zSql
SQLite 标准语句
形参三:char ***pazResult
获取到的表的内容的首地址
形参四:int * pnRow
获取到的表的 总行数
形参五:int * pnColumn
获取到的表的 总列数
形参六:char pzErrmsg
获取错误信息存放的地址,内部存放的字符串即为错误信息;
出现错误信息后记得使用 ==sqlite3_free()==将其内存释放;
返回参数**:
成功返回 0
失败返回错误码
char * look = "select * from 学生信息";
char ** paz_result;
int hang;
int lie;
if (SQLITE_OK != sqlite3_get_table(sql_db,look,&paz_result,&hang,&lie,&errmsg))
{
fprintf(stderr,"数据库操作错误\n%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("一共有%d行,每行参数%d个(列)\n",sum,lie);
printf("参数分别为:");
for (int temp = 0; temp < lie; temp++)
{
printf("%s\t",paz_result[temp]);
}
printf("\n\n详细信息\n");
int i,j,index = 0;
for ( i = 0; i hang; i++)
{
for ( j = 0; j < lie; j++)
{
printf("%s\t",paz_result[index]);
index ++;
}
printf("\n");
}
Original: https://blog.csdn.net/qq_50894278/article/details/126352992
Author: David_无霸哥
Title: Linux下使用SQLite3基本功能
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816726/
转载文章受原作者版权保护。转载请注明原作者出处!