socket聊天室---sqlite3的简单使用
创始人
2024-05-29 15:24:11
0

socket聊天室—sqlite3的简单使用


文章目录

  • socket聊天室---sqlite3的简单使用
  • C语言操作sqlite3
  • 常用函数
  • 不使用回调函数执行SQL语句
  • 使用回调函数执行SQL语句
  • 数据库编译
  • 其他函数
  • 完整实例


C语言操作sqlite3

假设数据库为my.db,有数据表student。

CREATE TABLE  IF NOT EXISTS student (no integer primary key, name text, score real);

常用函数

sqlite3_open
int   sqlite3_open(char  *path,   sqlite3 **db);
  • 功能: 打开sqlite数据库参数:
  • path: 数据库文件路径
  • db: 指向sqlite句柄的指针,后面对数据库所有的操作都要依赖这个句柄
  • 返回值: 成功返回0,失败返回错误码(非零值)
sqlite3_close
int   sqlite3_close(sqlite3 *db);
  • 功能: 关闭sqlite数据库
  • 返回值: 成功返回0,失败返回错误码
sqlite3_errmsg
const  char  *sqlite3_errmsg(sqlite3 *db);
  • 功能: 打印错误信息
  • 返回值: 返回错误信息

不使用回调函数执行SQL语句

sqlite3_get_table
int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int *nrow,                                        int *ncolumn, char **errmsg);
  • 功能: 执行SQL操作参数:
  • db:数据库句柄 sql:SQL语句
  • resultp:用来指向sql执行结果的指针
  • nrow:满足条件的记录的数目
  • ncolumn:每条记录包含的字段数目
  • errmsg:错误信息指针的地址
  • 返回值: 成功返回0,失败返回错误码
    eg:
    要显示student表中所有的数据信息,我们就可以利用sqlite3_get_table()执行语句:
    select * from student
    代码:
void do_show_sample(sqlite3 *db) { char **result, *errmsg;int nrow, ncolumn, i, j,index; if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn,&errmsg) != 0){ printf("error : %s\n", errmsg);  sqlite3_free(errmsg);} index = ncolumn;for (i=0; i  for (j=0; j  printf("%-8s : %-8s\n", result[j], result[index]);index++; }  printf("************************\n");} sqlite3_free_table(result); return; 
}

使用回调函数执行SQL语句

sqlite3_exec
typedef  int (*sqlite3_callback)(void *, int, char **, char **);
int   sqlite3_exec(sqlite3 *db, const  char  *sql,  sqlite3_callback callback, void *,char **errmsg);
  • 功能: 执行SQL操作参数:
  • db:数据库句柄
  • sql:SQL语句,就是我们前面两章用于操作表的增删改查语句
  • callback:回调函数
  • errmsg:错误信息指针的地址
  • 返回值: 成功返回0,失败返回错误码
    回调函数
typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
  • 功能: 每找到一条记录自动执行一次回调函数参数:
  • para:传递给回调函数的参数
  • f_num:记录中包含的字段数目
  • f_value:包含每个字段值的指针数组
  • f_name:包含每个字段名称的指针数组
    返回值: 成功返回0,失败返回-1
    eg
sqlite3 *db;
char  *errmsg,**resultp;
int callback(void *para, int f_num, char **f_val, char **f_name){int i;for (i=0; i printf("%-8s", f_val[i]); }printf("\n"); return 0;
}
void do_show(sqlite3 *db){char *errmsg; printf("no      name    score\n");  if (sqlite3_exec(db, "select * from student", callback, NULL, &errmsg) != 0) {  printf("error : %s\n", sqlite3_errmsg(db));}printf("\n");return;
}

回调函数方法实现的代码,需要实现一个回调函数:callback。函数sqlite3_exec()在解析命令"select * from student" ,每获取到一行数据就会调用一次回调函数

数据库编译

编译需要使用第三方库lsqlite3。

gcc student.c -o run -lsqlite3

其他函数

sqlite3 *pdb

数据库句柄,跟文件句柄FILE很类似

sqlite3_stmt *stmt

这个相当于ODBC的Command对象,用于保存编译好的SQL语句

sqlite3_exec()

执行非查询的sql语句

sqlite3_prepare()

准备sql语句,执行select语句或者要使用parameter bind时,用这个函数(封装 了sqlite3_exec)

Sqlite3_step()

在调用sqlite3_prepare后,使用这个函数在记录集中移动
还有一系列的函数,用于从记录集字段中获取数据,如:

sqlite3_column_text()

取text类型的数据

sqlite3_column_blob()

取blob类型的数据

sqlite3_column_int()

取int类型的数据

完整实例

#include 
#include 
#include 
#include void do_insert(sqlite3 *db)
{int no;char name[16];float score;char sqlstr[128], *errmsg;printf("input no : ");scanf("%d", &no);printf("input name : ");scanf("%s", name);printf("input score : ");scanf("%f", &score);sprintf(sqlstr, "insert into student values (%d, '%s', %.1f)", no, name, score);#if __DEBUGprintf("cmd:%s\n",sqlstr);#endifif (sqlite3_exec(db, sqlstr, NULL, NULL, &errmsg) != 0){printf("error : %s\n", sqlite3_errmsg(db));}else{printf("insert is done\n");}printf("\n");return;
}void do_delete(sqlite3 *db)
{char *errmsg;char sqlstr[128], expression[64];printf("input expression : ");scanf("%s", expression);//name='ma'sprintf(sqlstr, "delete from student where %s", expression);
#if __DEBUGprintf("cmd:%s\n",sqlstr);
#endifif (sqlite3_exec(db, sqlstr, NULL, NULL, &errmsg) != 0){printf("error : %s\n", sqlite3_errmsg(db));}else{printf("deletet is done\n");}printf("\n");return;
}int callback(void *para, int f_num, char **f_val, char **f_name)
{int i;for (i=0; iprintf("%-8s", f_val[i]);}printf("\n");return 0;
}void do_show(sqlite3 *db)
{char *errmsg;printf("no      name    score\n");if (sqlite3_exec(db, "select * from student", callback, NULL, &errmsg) != 0){printf("error : %s\n", sqlite3_errmsg(db));}printf("\n");return;
}void do_show_sample(sqlite3 *db){char **result, *errmsg;int nrow, ncolumn, i, j, index;if (sqlite3_get_table(db, "select * from student", &result, &nrow, &ncolumn, &errmsg) != 0){printf("error : %s\n", errmsg);sqlite3_free(errmsg);}index = ncolumn;for (i=0; ifor (j=0; jprintf("%-8s : %-8s\n", result[j], result[index]);index++;}printf("************************\n");}sqlite3_free_table(result);return;}int main()
{sqlite3 *db;int n;char clean[64];if (sqlite3_open("my.db", &db) < 0){printf("fail to sqlite3_open : %s\n", sqlite3_errmsg(db));return -1;}while ( 1 ){printf("*********************************************\n");printf("1: insert record   \n2: delete record  \n3: show record  \n4: quit\n");printf("*********************************************\n");printf("please select : "); if (scanf("%d", &n) != 1){fgets(clean, 64, stdin);printf("\n");continue;}switch ( n ){case 1 :do_insert(db);break;case 2 :do_delete(db);break;case 3 :do_show_sample(db);break;case 4 :sqlite3_close(db);exit(0);}}return 0;
}

相关内容

热门资讯

夏天作文400字四年级(实用... 夏天作文400字四年级 篇一夏天的一天夏天是我最喜欢的季节之一。夏天的早晨总是阳光明媚,鸟儿欢快地唱...
四年级写做叶画的作文(最新3... 四年级写做叶画的作文 篇一我喜欢画画,而且我最喜欢画的是叶子。叶子有各种各样的形状和颜色,所以每一片...
四年级作文三亚蜈支洲15篇【... 四年级作文三亚蜈支洲15篇 篇一:蜈支洲的美景蜈支洲是我国的一个美丽的海岛,位于海南省三亚市附近。我...
小学四年级周记【优选6篇】 小学四年级周记 篇一今天天气晴朗,我和同学们一起来到学校。早上的第一节课是数学课,老师教我们学习了一...
我的朋友四年级学生作文【优选... 我的朋友四年级学生作文 篇一我的朋友小明我有一个好朋友,他叫小明。小明是一个四年级的学生,他是个聪明...
开学第一天作文四年级300字... 篇一:开学第一天作文四年级300字16篇第一篇内容:开学第一天的新鲜感今天是开学的第一天,我早早地起...
我的妈妈四年级作文(实用6篇... 我的妈妈四年级作文 篇一:我的妈妈是最好的妈妈我的妈妈是一位非常了不起的妈妈。她是我的榜样和朋友。她...
金仓湖四年级作文(最新6篇) 金仓湖四年级作文 篇一秋天的金仓湖金仓湖是我家附近的一个美丽湖泊,它四季如春,我最喜欢的季节是秋天。...
我喜欢春天四年级优秀作文【最... 我喜欢春天四年级优秀作文 篇一春天是一年中最美丽的季节,我非常喜欢春天。春天来了,大地变得生机勃勃,...
四年级300字350字作文(... 四年级300字作文 篇一: 我最喜欢的动物我最喜欢的动物是熊猫。熊猫是中国的国宝,它们有着黑白相间的...
我自己作文600字(精选4篇... 我自己作文600字 篇一我的追梦之路人生如同一场漫长的旅行,每个人都带着自己的梦想踏上这个旅程。而我...
我心中的秘密作文四年级300... 我心中的秘密作文四年级300字63篇 篇一标题:小猫咪的秘密我家养了一只小猫咪,它是我心中的秘密。它...
捉螃蟹六年级作文(经典3篇) 捉螃蟹六年级作文 篇一:难忘的螃蟹之旅今年夏天,我和家人一起去了一个美丽的海边小镇度假。除了游泳、沙...
好样的,家乡菜四年级作文(实... 好样的,家乡菜四年级作文 篇一家乡菜是我最喜欢的美食之一。它不仅味道鲜美,而且富含各种营养成分。我想...
四年级期末作文【经典5篇】 四年级期末作文 篇一:我的暑假计划暑假就要到了,我已经迫不及待地想要开始我的暑假计划了。这个暑假,我...
温暖的时刻作文600字六年级... 温暖的时刻作文600字六年级 篇一温暖的时刻今天是一个特别温暖的日子,阳光明媚,微风轻拂,仿佛整个世...
多彩的活动六年级作文600字... 多彩的活动六年级作文600字 篇一喜迎运动会今天是我们学校年度盛事——运动会的日子,同学们都早早地来...
我想象中的六年级作文【实用3... 我想象中的六年级作文 篇一我的六年级生活六年级,对于我来说是一个充满期待和憧憬的年级。我想象中的六年...
珍惜资源六年级作文(精彩6篇... 珍惜资源六年级作文 篇一珍惜资源,从我做起我国资源状况非常严峻,各种资源的浪费现象屡见不鲜。作为一个...
我最害怕的事六年级作文【通用... 我最害怕的事六年级作文 篇一我的最大恐惧我叫小明,是一个六年级的学生。尽管我还小,但也有着自己最害怕...