linux下sqlite3事务使用问题

HW_Coder0501 2017-05-18 11:21:59
自己写了一个sqlite3 的事务使用的程序,但运行时出现了错误,由于是新学sqlite,所以一直查不出错误原因,参考网上的sqlite事务编程和我的都大致一样,不知道我的程序哪里出了错,运行结果并没有达到网上例程的效果,所以想请诸位大神帮忙查看一下。程序如下:

#include <stdio.h>
#include "sqlite3.h"
#include <string.h>

typedef enum __bool {false = 0, true = 1,} bool;
#define CHECK_RC(rc, szInfo, NULL, db) if(rc != SQLITE_OK) { printf("%s error!\n", szInfo); sqlite3_close(db); return 0;}

static int callback(void *para, int n_column, char **column_value, char **column_name)
{
int i;
printf("记录包含%d个字段\n", n_column);
for(i = 0; i<n_column; i++)
{
printf("字段名:%s, 字段值:%s \n", column_name[i], column_value[i]);
}

return 0;
}
int main()
{
char sql[128];
sqlite3 *db;
FILE *fd;
int s_temp = 29;
int rc, i = 0;
char *zErrorMsg = 0;
// const char * selectSQL = "SELECT *

bool success_is = true;

sqlite3_stmt * stmt;


sqlite3_open("temperature.db", &db);
memset(sql, '\0', 128);
strcpy(sql, "create table if not exists tb(id INTEGER PRIMARY KEY, data TEXT)");
rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if(rc != SQLITE_OK)
{
printf("SQL exec error.\n");
return -1;
}
printf("begin transaction.\n");
if(sqlite3_exec(db, "begin transaction", 0, 0, 0) != SQLITE_OK)
{
printf(" begin transaction failed. \n");
return -1;
}

for(i = 0; i<10; i++)
{
//memset(sql, '\0', 128);
printf("begin insert.\n");
snprintf(sql, "insert into tb([id],[data]) values(%d,'%s')", i+1,"Boll"); //第二次循环时会在此处出现问题,也就是第二次insert不会成功

//strcat(sql, &s_temp);

//strcat(sql, "\")");
rc = sqlite3_exec(db, sql, NULL, NULL, &zErrorMsg);
if(rc != SQLITE_OK)
{
fprintf(stderr,"SQL exec2 error:%s\n",zErrorMsg);
printf("insert error.\n");
success_is = false;
sqlite3_free(zErrorMsg);
break;//return -1;
}
else printf("insert success.\n");

}

if(success_is)
sqlite3_exec(db, "commit transaction", 0, 0, 0);
else
sqlite3_exec(db, "rollback transaction", 0, 0, 0);
//int id = sqlite3_column_int(stmt, 0);//查询当前行第1列的整型值
//char* data1 = (char *)sqlite3_column_text(stmt, 1);
printf("begin select.\n");
char *szSql = "select * from tb";
rc = sqlite3_exec(db, szSql, callback, NULL, NULL);
CHECK_RC(rc, "query values", NULL, db);
// printf("ID: %d \n", id);
// printf("DATA1: %s \n", data1);
//sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
...全文
206 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-05-19
  • 打赏
  • 举报
回复
建议版主移到 C++ 版块吧

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧