在本文中,我们将介绍关于 SQLITE 与…结合 C++ 或 C . 在继续本教程之前,我们需要遵循 SQLITE3安装 容易找到的程序 在这里 .同时,还需要具备以下基本知识: SQL .
我们将展示以下操作:
- 数据库连接/创建
- 创建表格
- 插入
- 删去
- 选择
为了简单起见,让我们使用一个由一个表组成的简单数据库。
数据库连接/表的创建
在这段代码中,我们将使用中包含的两个例程 sqlite3。H 图书馆
- sqlite3_open(const char *filename, sqlite3 **ppDb) - sqlite3_close(sqlite3 *ppDb)
编译由add of命令执行 -l sqlite3 .
#include <iostream> #include <sqlite3.h> int main( int argc, char ** argv) { sqlite3* DB; int exit = 0; exit = sqlite3_open( "example.db" , &DB); if ( exit ) { std::cerr << "Error open DB " << sqlite3_errmsg(DB) << std::endl; return (-1); } else std::cout << "Opened Database Successfully!" << std::endl; sqlite3_close(DB); return (0); } |
输出:
$ g++ createDB.cpp -l sqlite3 $ ./a.out Opened Database Successfully! $ ls create.cpp a.out example.db
第一个例程返回一个整数:如果整数等于0,则成功。如果数据库还不存在,则将在执行该进程的同一目录中创建该数据库。 第二个只是关闭之前由打开的连接 SQLITE3_OPEN() . 所有与连接相关的准备好的声明都应在关闭连接之前完成。
创建表格
在这个片段中,我们将使用以下例程:
- sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
#include <iostream> #include <sqlite3.h> int main( int argc, char ** argv) { sqlite3* DB; std::string sql = "CREATE TABLE PERSON(" "ID INT PRIMARY KEY NOT NULL, " "NAME TEXT NOT NULL, " "SURNAME TEXT NOT NULL, " "AGE INT NOT NULL, " "ADDRESS CHAR(50), " "SALARY REAL );" ; int exit = 0; exit = sqlite3_open( "example.db" , &DB); char * messaggeError; exit = sqlite3_exec(DB, sql.c_str(), NULL, 0, &messaggeError); if ( exit != SQLITE_OK) { std::cerr << "Error Create Table" << std::endl; sqlite3_free(messaggeError); } else std::cout << "Table created Successfully" << std::endl; sqlite3_close(DB); return (0); } |
输出:
$ g++ createTable.cpp -l sqlite3 $ ./a.out Table created Successfully
此例程返回一个整数:如果整数等于 好的 宏,一切顺利。 对于本例,省略了在过去的代码中编写的有关打开数据库的控件。
插入和删除
我们将使用 SQLITE3_EXEC() 插入程序也是如此。程序和检查与前一个类似。我们使用的字符串与 SQLITE3_EXEC() .
#include <iostream> #include <sqlite3.h> #include <string> using namespace std; static int callback( 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" , azColName[i], argv[i] ? argv[i] : "NULL" ); } printf ( "" ); return 0; } int main( int argc, char ** argv) { sqlite3* DB; char * messaggeError; int exit = sqlite3_open( "example.db" , &DB); string query = "SELECT * FROM PERSON;" ; cout << "STATE OF TABLE BEFORE INSERT" << endl; sqlite3_exec(DB, query.c_str(), callback, NULL, NULL); string sql( "INSERT INTO PERSON VALUES(1, 'STEVE', 'GATES', 30, 'PALO ALTO', 1000.0);" "INSERT INTO PERSON VALUES(2, 'BILL', 'ALLEN', 20, 'SEATTLE', 300.22);" "INSERT INTO PERSON VALUES(3, 'PAUL', 'JOBS', 24, 'SEATTLE', 9900.0);" ); exit = sqlite3_exec(DB, sql.c_str(), NULL, 0, &messaggeError); if ( exit != SQLITE_OK) { std::cerr << "Error Insert" << std::endl; sqlite3_free(messaggeError); } else std::cout << "Records created Successfully!" << std::endl; cout << "STATE OF TABLE AFTER INSERT" << endl; sqlite3_exec(DB, query.c_str(), callback, NULL, NULL); sql = "DELETE FROM PERSON WHERE ID = 2;" ; exit = sqlite3_exec(DB, sql.c_str(), NULL, 0, &messaggeError); if ( exit != SQLITE_OK) { std::cerr << "Error DELETE" << std::endl; sqlite3_free(messaggeError); } else std::cout << "Record deleted Successfully!" << std::endl; cout << "STATE OF TABLE AFTER DELETE OF ELEMENT" << endl; sqlite3_exec(DB, query.c_str(), callback, NULL, NULL); sqlite3_close(DB); return (0); } |
输出:
$ g++ insertDelete.cpp -l sqlite3 $ ./a.out STATE OF TABLE BEFORE INSERT Records created Successfully! STATE OF TABLE AFTER INSERT ID = 1 NAME = STEVE SURNAME = GATES AGE = 30 ADDRESS = PALO ALTO SALARY = 1000.0 ID = 2 NAME = BILL SURNAME = ALLEN AGE = 20 ADDRESS = SEATTLE SALARY = 300.22 ID = 3 NAME = PAUL SURNAME = JOBS AGE = 24 ADDRESS = SEATTLE SALARY = 9900.0 Record deleted Successfully! STATE OF TABLE AFTER DELETE OF ELEMENT ID = 1 NAME = STEVE SURNAME = GATES AGE = 30 ADDRESS = PALO ALTO SALARY = 1000.0 ID = 3 NAME = PAUL SURNAME = JOBS AGE = 24 ADDRESS = SEATTLE SALARY = 9900.0
选择
在继续显示选择操作之前,我们可以很容易地考虑到所有教程中最重要的内容,让我们来看一下 回拨 我们将在示例中使用的原型。 此操作允许我们从Select操作获取输出:
typedef int (*sqlite3_callback)( void*, /* Data provided in the 4th argument of sqlite3_exec() */ int, /* The number of columns in row */ char**, /* An array of strings representing fields in the row */ char** /* An array of strings representing column names */ );
现在,我们将在Select中使用回调函数,如下面的代码片段所示:
#include <iostream> #include <sqlite3.h> using namespace std; static int callback( 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" , azColName[i], argv[i] ? argv[i] : "NULL" ); } printf ( "" ); return 0; } int main( int argc, char ** argv) { sqlite3* DB; int exit = 0; exit = sqlite3_open( "example.db" , &DB); string data( "CALLBACK FUNCTION" ); string sql( "SELECT * FROM PERSON;" ); if ( exit ) { std::cerr << "Error open DB " << sqlite3_errmsg(DB) << std::endl; return (-1); } else std::cout << "Opened Database Successfully!" << std::endl; int rc = sqlite3_exec(DB, sql.c_str(), callback, ( void *)data.c_str(), NULL); if (rc != SQLITE_OK) cerr << "Error SELECT" << endl; else { cout << "Operation OK!" << endl; } sqlite3_close(DB); return (0); } |
输出: $g++选择。cpp-l sqlite3 $ ./a、 出去
Opened Database Successfully! RESULT OF SELECT ID = 1 NAME = STEVE SURNAME = GATES AGE = 30 ADDRESS = PALO ALTO SALARY = 1000.0 ID = 3 NAME = PAUL SURNAME = JOBS AGE = 24 ADDRESS = SEATTLE SALARY = 9900.0 Operation OK!
本文提供了使用C++/C使用SQLITE3的数据库的快速指南。 在我们的例子中,我们使用C++,但是当我们通过字符串时,我们调用 c_str() 方法,以转换字符数组中的字符串:这证明所有使用的例程也可以在C中使用。
这篇文章是与 维托里奥三叠系 学生 科学技术系 那不勒斯大学 .