CGI如何用C控制sqlite3?

利用C编写CGI程序,如何控制sqlite3,进行基本的数据库操作?


需要建立的变量
sqlite3 *db;
int nrow = 0, ncolumn = 0;
char **azresult = null;
char *zerrmsg = 0;

char sql[500];
int rc = 0;


需要包含的头文件
#include <sqlite3.h>
备注:详见搭建sqlite3嵌入式开发环境,安装后,会产生一个sqlite3.h的文件。


1 打开数据库(open)
rc = sqlite3_open("test.db", &db);
if (rc)
{
printf("content-type: text/html\n\n");
fprintf(stderr, "can't open database: %s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
return sql_errror();
}


其中,sql_error()是自定义的函数。


2 关闭数据库(close)
sqlite3_close(db);


3 查(select)
sprintf(sql, 
"select * from user where name='%s' and passwd='%s'", 
username, passwd);
rc = sqlite3_get_table( db , sql , &azresult , &nrow , &ncolumn , &zerrmsg );
if (rc != sqlite_ok)
{
printf("content-type: text/html\n\n");
fprintf(stderr, "sql error: %s\n", zerrmsg);
sqlite3_close(db);
return sql_errror();
 }
if(*azresult != null)
{
printf("content-type: text/html\n\n");
int i;
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azresult[%d] = %s\n", i , azresult[i] );
...
}


查询的结果保存在**azResult中,为nrow x ncolumn数组。


4 增(insert)
static int callback(void *notused, int argc, char **argv, char **azcolname)
{
int i = 0;
printf("content-type: text/html\n\n");
for (i=0; i<argc; i++)
{    
printf("%s = %s\n", azcolname[i], argv[i] ? argv[i] : "null");
}
printf("\n");
return 0;
}
回调函数(callback)


5 改(update)
sprintf(sql, 
"update user set userid='%s' where name='%s'", 
userid,username);
rc = sqlite3_exec(db, sql, callback, 0, &zerrmsg);
if (rc != sqlite_ok)
{
fprintf(stderr, "sql1 error: %s\n", zerrmsg);
return 1;
}


6 删(delete)
sprintf(sql, 
"delete from user where name='%s'", 
username);
rc = sqlite3_exec(db, sql, callback, 0, &zerrmsg);
if (rc != sqlite_ok)
{
fprintf(stderr, "sql1 error: %s\n", zerrmsg);
return 1;
}


7 创建表
sprintf(sql, 
"create table user(name varchar(20), passwd varchar(20))");
rc = sqlite3_exec(db, sql, callback, 0, &zerrmsg);
if (rc != sqlite_ok)
{
fprintf(stderr, "sql1 error: %s\n", zerrmsg);
return 1;
}


8 删除表
sprintf(sql, 
"drop table user");
rc = sqlite3_exec(db, sql, callback, 0, &zerrmsg);
if (rc != sqlite_ok)
{
fprintf(stderr, "sql1 error: %s\n", zerrmsg);
return 1;
}


其他操作相类似,不再赘述。详细请参考:
http://www.w3school.com.cn/sql/sql_drop.asp
http://www.sqlite.org/sqlite.html
如何编译,请参见c调用sqlite3的编译方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值