首页 > 数据库 >c++ 之连接sqlite数据库(vsode)

c++ 之连接sqlite数据库(vsode)

时间:2024-07-04 16:57:30浏览次数:12  
标签:char sqlite zErrMsg int c++ vsode fprintf SQL sqlite3

Tasks.json中添加配置"-lsqlite3"

#include<sqlite3.h> #include<iostream> #include<errno.h>

static int callback1(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }
static int callback_insert(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }
/* void *data: 这是用户定义的数据,通常在调用 sqlite3_exec 时传入。 int argc: 这是结果集中列的数量。 char **argv[]: 这是一个指向字符串数组的指针,数组中的每个元素都是结果集中对应列的值。 char **azColName[]: 这是一个指向列名的字符串数组的指针。 */ static int callback_select(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }
static int callback_update(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }
static int callback_delete(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; }

int main(){ std::cout<<"asdf"<<std::endl; sqlite3 *db; char *sql; char *zErrMsg = 0; const char* data = "Callback function called";
int rc = sqlite3_open("/home/trc/cPlus/data.db",&db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "CREATE TABLE INF(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback1, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Table created successfully\n"); }

/* Create SQL statement */ sql = "INSERT INTO INF (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \ "INSERT INTO INF (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \ "INSERT INTO INF (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \ "INSERT INTO INF (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
/* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback_insert, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Records created successfully\n"); }

/* Create SQL statement */ sql = "SELECT * from INF";
/* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback_select, (void*)data, &zErrMsg); /*SQLITE_OK:成功。 SQLITE_ERROR:一般性错误。 SQLITE_BUSY:数据库忙。*/ if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); }

/* Create merged SQL statement */ sql = "UPDATE INF set SALARY = 25000.00 where ID=1; " \ "SELECT * from INF";
/* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback_update, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); }
/* Create merged SQL statement */ sql = "DELETE from INF where ID=2; " \ "SELECT * from INF";
/* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback_delete, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); }
sqlite3_close(db); return 0; }

标签:char,sqlite,zErrMsg,int,c++,vsode,fprintf,SQL,sqlite3
From: https://www.cnblogs.com/trc258/p/18284192

相关文章

  • 使用g++对c++进行编译链接
    静态库静态库的生成静态库实际就是多个.o的归档(文件夹)//在bash终端执行依次执行以下g++命令.g++-csrc1.cppsrc2.cpparcrvlibmy.asrc1.osrc2.o查看静态库内容://输出src1.0,src2.0,这也验证了静态库.a文件实际就是个归档目录ar-tlibmy.a......
  • C++单例模式、工厂模式、观察者模式等的实现和应用场景。
    设计模式是软件开发中常用的解决方案,它们提供了一些经过验证的方法来解决常见的设计问题。以下是单例模式、工厂模式和观察者模式在C++中的实现和应用场景的详细讲解。1.单例模式(SingletonPattern)概念单例模式确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。......
  • 多线程编程的基本概念,C++标准库中的多线程支持(std::thread,std::async),如何处理线程同步
    多线程编程在现代计算机系统中非常重要,因为它能够使程序同时执行多个操作,提高计算效率。以下是多线程编程的基本概念及如何在C++标准库中使用std::thread和std::async进行多线程编程,同时处理线程同步和并发问题。多线程编程的基本概念线程(Thread):线程是一个轻量级的进程,是......
  • 用C++解决编程题目:求特殊自然数
    学习目标:用C++编写简单的程序学习内容:#include<iostream>usingnamespacestd;intmain(){ inta,b,c; for(a=1;a<7;a++){ for(b=0;b<7;b++){ for(c=1;c<7;c++){ if(a*7*7+b*7+c==c*9*9+b*9+a){ cout<<a*7*7+b*7+c<<endl; cout<......
  • C/C++ 比较运算的注意事项
    C/C++中比较运算是一个基础且重要的概念,它用于比较两个或多个表达式的值,并返回一个布尔结果(在C/C++中以整数形式表示,真为1,假为0)。以下是一些关于C/C++比较运算的注意事项:1.比较运算符C/C++中的比较运算符包括:==(等于)!=(不等于)<(小于)>(大于)<=(小于等于)>=(大于等于)这......
  • 汽车站车票管理系统(C++版)
    设计要求程序菜单功能一个汽车站每天有n班通往各地的车,每班车都有唯一的车次号(00100,00101,00102,…),发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量等信息。每班车信息如下:表1.汽车站汽车数据库列表车次                    ......
  • 2024年华为OD机试真题- 分月饼-(C++/Java/python)-OD统一考试(C卷D卷)
      2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】   题目描述中秋节,公司分月饼,m个员工,买了n个月饼,m≤n,每个员工至少分1个月饼,但可以分多个,单人分到最多月饼的个数是Max1,单人分到第二多月饼个数是Max2,Max1-Max2≤3,单人分到第n-1多月饼个......
  • LeetCode 算法:路径总和 III c++
    原题链接......
  • C++文件系统操作2 - 跨平台实现文件夹的创建和删除
    1.关键词2.fileutil.h3.fileutil.cpp4.filesystem_win.h5.filesystem_win.cpp6.filesystem_unix.cpp7.源码地址1.关键词C++文件系统操作创建文件夹创建多级目录文件夹删除文件夹删除文件夹下的所有文件和子目录跨平台2.fileutil.h#pragmaonce#incl......
  • C++从淬体到元婴day10之模板
    2024/6/30模板概念:在C++中,模板是一种泛型编程的工具,它允许程序员编写与类型无关的代码。作用:通过使用模板,你可以编写一种可以处理多种数据类型的函数或类,而无需为每种数据类型编写单独的实现。分类:函数模板和类模板函数模板建立一个通用函数,其函数返回值类型和形参类......