当前位置: 首页 > news >正文

长治哪里做网站上海十大黑心装修公司

长治哪里做网站,上海十大黑心装修公司,wordpress anki插件,代理注册一个公司价格sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了。 数据库 本篇假设数据库为my.db,有数据表student。 nonamescore4嵌入式开发爱好者89.0 创建表格语句如下: CREATE T…

sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了。

数据库

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

nonamescore
4嵌入式开发爱好者89.0

创建表格语句如下:

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,失败返回错误码
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,失败返回错误码

举例

下面比如我们要显示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<nrow; i++){for (j=0; j<ncolumn; j++){printf("%-8s : %-8s\n", result[j], result[index]);   index++;}printf("************************\n");}sqlite3_free_table(result);return;}

假定当前的表格的数据信息如下:

nonamescore
4一口Linux77.0
5一口peng88.0
6一口wang99.0
7一口网66.0

关于这个函数中出现的这些参数的具体含义,我们可以见下图:

sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了。

数据库

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

nonamescore
4一口Linux89.0

创建表格语句如下:

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,失败返回错误码
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,失败返回错误码

举例

下面比如我们要显示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<nrow; i++){for (j=0; j<ncolumn; j++){printf("%-8s : %-8s\n", result[j], result[index]);   index++;}printf("************************\n");}sqlite3_free_table(result);return;}

假定当前的表格的数据信息如下:

nonamescore
4一口Linux77.0
5一口peng88.0
6一口wang99.0
7一口网66.0

关于这个函数中出现的这些参数的具体含义,我们可以见下图:

图片

在这里插入图片描述

由上图可知:代码中:

ncolumn = 3
nrow    = 5
result 指向所有的结果组成的字符串数组,
各个具体字符串的下标,图上已经标明。

结合此图再去理解代码,就很容易理解代码的实现原理。

使用回调函数执行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

举例

sqlite3 *db;
char  *errmsg,**resultp;int callback(void *para, int f_num, char **f_val, char **f_name)
{int i;for (i=0; i<f_num; 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" ,没获取到一行数据就会调用一次回调函数, 参考上面的表格student,

callback()总共会被调用5次,
f_num 对应结果的列数,为3
f_value 则指向 每一列对应的值组成的字符串数组

假设现在callback是第四次被调用,如下图:

图片

运行结果

编译需要使用第三方库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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sqlite3.h>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; i<f_num; 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;
}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<nrow; i++){for (j=0; j<ncolumn; j++){printf("%-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;
}

运行主页面:

图片

插入记录:

图片

显示记录:

图片

删除记录:

图片

http://www.yayakq.cn/news/120633/

相关文章:

  • 做网站 价格中国建设部
  • Wordpress网站收录不高wordpress博客联盟
  • 建设一个农家乐网站电商网站有哪些特色
  • 龙江手机网站建设怎么做网站维护宣传
  • 博客和网站的区别wordpress 前端图片上传
  • 营销网站开发系统wordpress插件清单 很多很全
  • 南阳网站开发公司网站空间备案
  • flash做网站的论文c 如何做网站
  • 网站建设基广州网站建
  • 怎么做同城网站网页制作培训上海排名前十
  • 网上做图赚钱的网站禁止搜索引擎抓取wordpress的目录
  • wordpress酷站百度快照有什么用
  • 珠海市官网网站建设品牌东莞制作网站的联系方式
  • 跟建设通一样的网站外贸跟单的流程
  • 撸撸撸做最好的导航网站政务版企业微信app下载安装
  • 电话营销网站推广浦东新区建设局官方网站
  • 部门网站建设情况汇报怎么把图片做成链接形式
  • 设计素材网站有哪些平台东莞做网站的公司有哪些
  • 网站定制营销的过程服务专业的网站建设服务
  • 做微信的网站叫什么wordpress交流插件
  • 衡水哪家制作网站好网站模块设计软件
  • 巩义移动网站建设网站源代码上传都需要怎么做
  • 沈阳做网站一诚金网络专业如何网上外贸接单
  • 做论坛网站需要哪些前置审批做网站注意事项
  • 湖南省建设信息网站电子商务网站建设技能实训答案
  • 网站建设冖金手指花总十四设计在线好看
  • 赣州市网站建设公司华为网络工程师培训费用
  • 如何设计公司官网站易语言怎么用网站做背景音乐
  • 长沙网站建设 599在线免费开网站
  • 网站建设好了怎么发布平台搭建与拆除