c语言文件读入int数据库,C语言读写SQLite数据库

1环境

win10 + Qt 5.9 + sqlite 3

2Qt工程配置

TEMPLATE = app

CONFIG += console

CONFIG -= app_bundle

CONFIG -= qt

SOURCES += main.c

INCLUDEPATH += $$_PRO_FILE_PWD_/sqlite3

LIBS += -L $$_PRO_FILE_PWD_/sqlite3 -lsqlite3

3sqlite3接口介绍

3.1 int sqlite3_open

函数声明 int sqlite3_open(

const char *filename,

sqlite3 **ppDb

);

所在文件 sqlite3.h

函数功能 打开一个数据库,文件名不一定要存在,如果此文件不存在,sqlite会自动创建

参数及返回解析

参数

const char* 指文件名

sqlite3 ** 结构体指针(关键数据结构)

返回值

int 表示操所是否正确 (SQLITE_OK 操作正常)

3.2 int sqlite3_close

函数声明 int sqlite3_close(

sqlite3* db

);

所在文件 sqlite3.h

函数功能 如果用sqlite3_open开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。

参数及返回解析

参数 sqlite3* 数据库句柄

返回值 int 表示操所是否正确 (SQLITE_OK 操作正常)

3.3 sqlite3_exec

函数声明 int sqlite3_exec(

sqlite3*,

const char *sql,

sqlite_callback,

void *,

char **errmsg

);

所在文件 sqlite3.h

函数功能 这个函数的功能是执行一条或者多条SQL语句,SQL语句之间用“;”号隔开。

通常sqlite3_callback和它后面的void*这两个位置都可以填NULL,表示不需要回调。比如您做insert操作,做delete操作,就没有必要使用回调。而当作select时,就要使用回调,因为sqlite3把数据查出来,得通过回调告诉你查出了什么数据。

参数及返回解析

参数

sqlite3* 数据库句柄

const char* 待执行的sql语句

sqlite_callback 回调函数

void * 传入参数

char ** 输出错误信息

返回值

int 表示操所是否正确 (SQLITE_OK 操作正常)

3.3 typedef int (*sqlite3_callback)

函数声明 typedef int (*sqlite3_callback)(

void* data,

int argc,

char** argv,

char** column

);

所在文件 sqlite3.h

函数功能 回调函数必须定义为这个函数的类型

参数及返回解析

参数 void * Data providedin the 4th argument of sqlite3_exec()

int The number of columns in row

char ** An array of strings representing fields in the row An array of strings representing column names

char **

返回值

int 在回调函数中可以获得执行Sql得详细过程,如果所有Sql执行完毕则应该返回0,否则,则说明这次执行并没有完全成功

3.3 int sqlite3_get_table

函数声明 int sqlite3_get_table(

sqlite3*,

const char *sql,

char ***resultp,

int *nrow,

int *ncolumn,

char **errmsg

)

所在文件 sqlite3.h

函数功能 执行一次查询Sql 并且返回得到一个记录集。

参数及返回解析

参数

sqlite3* 句柄

const char * sql

char * 它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值

int * 行数

int * 列数

char ** 错误信息

返回值

int 表示操所是否正确 (SQLITE_OK 操作正常)

3代码示例

#include

#include "sqlite3.h"

//读多少行,就执行多少次回调

#if 0

argc 3

argv **

char * caocao

char * weiguo

char * 100000

colName

char * name

char * address

char * salary

#endif

#if 0

argc 3

argv **

char * suquan

char * wuguo

char * 20000

colName

char * name

char * address

char * address

#endif

#if 0

char **

char *name

char *address

char *salary

char *caocao

char *weiguo

char *100000

char *suquan

char *wuguo

char *20000

#endif

static int callback(void *NotUsed, int argc, char **argv, char **ColName)

{

// printf("argc = %d

",argc);

// int i;

// for(i=0; i

// printf("%s = %s

", ColName[i], argv[i] ? argv[i] : "NULL");

// }

// printf("

");

static int flag = 1;

if(flag)

{

for(int i=0; i

printf("%s",ColName[i]);

flag = 0;

}

putchar(10);

for(int i=0; i

printf("%s",argv[i]);

return 0;

}

int main(int argc, char *argv[])

{

sqlite3 *db; // FILE*

char *zErrMsg = 0;

int rc;

rc = sqlite3_open("mydb", &db);

if( rc ){

fprintf(stderr, "Can't open database: %s

", sqlite3_errmsg(db));

sqlite3_close(db);

return(1);

}

// rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);

// if( rc!=SQLITE_OK ){

// fprintf(stderr, "SQL error: %s

", zErrMsg);

// sqlite3_free(zErrMsg);

// }

char *sql;

// char* sql = "create table salary(name text,address text,salary REAL)";

// rc = sqlite3_exec(db, sql, NULL, NULL, &zErrMsg);

// if( rc!=SQLITE_OK ){

// fprintf(stderr, "SQL error: %s

", zErrMsg);

// sqlite3_free(zErrMsg);

// }

#if 0

sql = "insert into salary values("caocao","weiguo",10000)";

rc = sqlite3_exec(db, sql, NULL, NULL, &zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

sql = "insert into salary values("sunquan","wuguo",100000)";

rc = sqlite3_exec(db, sql, NULL, NULL, &zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

sql = "insert into salary values("liube","shuguo",20000)";

rc = sqlite3_exec(db, sql, NULL, NULL, &zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

float salary;

printf("刘备的工资:");

scanf("%f",&salary);

char sqlcombine[1024];

sprintf(sqlcombine,"update salary set salary = %f where name = "liube"",salary);

rc = sqlite3_exec(db, sqlcombine, NULL, NULL, &zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

sql = "delete from salary where name = "liube"";

rc = sqlite3_exec(db, sql, NULL, NULL, &zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

sql = "select * from salary";

rc = sqlite3_exec(db, sql,callback, NULL, &zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

#endif

sql = "select * from salary";

char **table = NULL;

int row;

int column;

rc = sqlite3_get_table(db,sql,&table,&row,&column,&zErrMsg);

if( rc!=SQLITE_OK ){

fprintf(stderr, "SQL error: %s

", zErrMsg);

sqlite3_free(zErrMsg);

}

for(int i=0; i

{

printf("%s",table[i]);

}

putchar(10);

for(int i=column; i

{

printf("%s",table[i]);

if(!((i+1)%column))

putchar(10);

}

sqlite3_free_table(table);

sqlite3_close(db);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值