linux下SQLite3数据库

目录

一、SQLite3的安装

二、数据库的创建和打开

 三、数据库的常见命令

 三、SQL语句

1.创建数据库表

 2.插入记录

3.查询记录

 4.更新记录

5.删除记录

 6.删除数据库表

四、 SQLITE3 API编程

1.打开数据库文件的函数

 2.执行sql语句的函数

3.非回调的selectc查询


一、SQLite3的安装

sudo apt-get install sqlite3 //数据库操作软件
sudo apt-get install libsqlite3-dev //数据库开发库

二、数据库的创建和打开

终端输入 sqlite3 <数据库名>.db

当数据库存在时直接打开,不存在时创建并打开。 

 三、数据库的常见命令

.help   显示帮助信息

.quit  退出SQLite3 

 .database  显示当前打开的数据库文件

.tables 显示数据库的数据库的所有表名

 .schema 查看表的结构 

 三、SQL语句

1.创建数据库表

格式:create table table_name(column1 datatype,column2 datatype,...,columnN datatype); 

table_name:数据库表名。

columnN:表示第N个字段名。

datatype:字段名的类型(

NULL:NULL值 。

INTEGER:值是一个带符号的整数,根据值的大小储存在1、2、3、4、6或8字节中。

REAL:值是一个浮点值,储存为8个字节的IEEE浮点数字。

TEXT:值是一个字符串,使用数据库编码(UTF-8,UTF-16BE或UTF-16LE)储存。

BLOB:值是一个blob数据的(二进制数据),完全根据他的输入储存。)。

PRIMARY YEK:用于表名主键字段的关键字(当一个字段设为主键后对应的值不能重复)。

IF NOT EXISTS:表示如果表存在,则不创建。

 2.插入记录

insert into table_name values(value1,value2,...,valueN);

3.查询记录

选取指定的列:select coloum1,coloum2,coloumN from table_name;

查询所有列:select * from table_name;

显示列的名字:.headers on

按照列显示:.mode coloum

where语句:用于指定从一个表或多个表中获取数据的条件

 4.更新记录

格式:update table_name set column1=value1,columnN=valueN where [condition];

set:指定需要修改的值段及字段的值。

5.删除记录

格式:delete from table_name where [condition];

 6.删除数据库表

格式:drop table table_name;

四、 SQLITE3 API编程

概念:SQLITE3数据库针对不同语言提供了相应的编程接口,下面介绍的是关于c语言接口。

1.打开数据库文件的函数

int sqlite3_open(const char *filename,sqlite3 **ppDb)

参数:@filename 数据库文件

           @ppDb 获得操作数据库的句柄

返回值:成功返回0(SQLITE_OK),失败返回错误码

const char *sqlite3_errmsg(sqlite3 *);

功能:获得打开数据库失败的错误信息

#include <stdio.h>
#include <sqlite3.h>
int main(int argc, const char *argv[])
{
	if(argc!=2)
	{
		fprintf(stderr,"请输入:%s 数据库\n",argv[0]);
		return -1;
	}
	int ret;
    sqlite3 *db;
	ret=sqlite3_open(argv[1],&db);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open fail:%s\n",sqlite3_errmsg(db));
		return -1;
	}
    sqlite3_close(db);
    return 0;
}

 2.执行sql语句的函数

int sqlite3_exec(sqlite3 *db,const char *sql,int(*callback)(void*,int,char**,char**),void *arg,char **errmsg)

参数:@db 打开的数据库

           @sql  sql语句

           @callback  回调函数

           @arg  给回调函数传递的第一个参数

           @errmsg  获取错误信息的存放地址

返回值:成功返回0,失败返回错误码

回调函数:int callback_function(void *arg,int ncolumn,char *value,char **name)

参数:@arg  传递的第一个参数

           @ncolumn 列数[字段的个数]

           @value  存放字段值的指针数组首地址

           @name  存放字段名的指针数组首地址

注意:1.只有在执行查询语句的时候,才会使用回调函数

           2.每查询到一条记录就会调用一次回调函数

#include <stdio.h>
#include <sqlite3.h>
int main(int argc, const char *argv[])
{
	if(argc!=2)
	{
		fprintf(stderr,"请输入:%s 数据库\n",argv[0]);
		return -1;
	}
	int ret;
	sqlite3 *db;
	char *sql="create table if not exsiti student(ID integer,NAME text,SCORE integer);";//创建名为student的表的sql语句
	char *errmsg
	ret=sqlite3_open(argv[1],&db);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open fail:%s\n",sqlite3_errmsg(db));
		return -1;
	}
	ret=sqlite3_exec(db,sql,NULL,NULL,&errmsg)
	{
		fprintf(stderr,"sqlite_exec:%s",errmsg);
		sqlite3_free(srrmsg);
		return -1;
	}
    sqlite3_close(db);
    return 0;
}

3.非回调的selectc查询

int sqlite3_get_table(sqlite3 *db,const char *zSql,char ***pazResult,int *pnRow,int *pnColumn,char **pzErrmsg)

参数:@db        打开的数据库

           @zSql       sql查询语句

           @pazResult    获得查询结果存放的指针数组的首地址

           @pnRow        获得查询记录的条数

           @pnColumn    查询到列的个数 

           @pzErrmsg     获得错误信息

返回值:成功返回0,错误返回错误码

viod sqlite3_free_table(char **result)

功能:释放结果表

#include <stdio.h>
#include <sqlite3.h>
int main(int argc, const char *argv[])
{
	if(argc!=2)
	{
		fprintf(stderr,"请输入:%s 数据库\n",argv[0]);
		return -1;
	}
	int ret,i,j,index=0;
	sqlite3 *db;
	char *sql="select * from student;"
	char *errmsg
	char **result;
	int row,column;
	ret=sqlite3_open(argv[1],&db);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open fail:%s\n",sqlite3_errmsg(db));
		return -1;
	}
	ret=sqlite3_get_table(db,sql,&result,&row,&column,&errmsg);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_get_table:%s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}
    //打印查询到的数据
    for(i=0;i<row+1;i++)//因为打印时第一行是段名所以要row+1;
    {
        for(j=0;i<column;j++)
        { 
            printf("%s ",result[index++]);
        }
        printf("\n");
    }
    sqlite3_free_table(result);
    sqlite3_close(db);
    return 0;
}

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远辰与鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值