使用C/C++和SQLite的SQL

在本文中,我们将介绍关于 SQLITE 与…结合 C++ C . 在继续本教程之前,我们需要遵循 SQLITE3安装 容易找到的程序 在这里 .同时,还需要具备以下基本知识: SQL .

null

我们将展示以下操作:

  • 数据库连接/创建
  • 创建表格
  • 插入
  • 删去
  • 选择

为了简单起见,让我们使用一个由一个表组成的简单数据库。 Table used for examples.

数据库连接/表的创建

在这段代码中,我们将使用中包含的两个例程 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中使用。

这篇文章是与 维托里奥三叠系 学生 科学技术系 那不勒斯大学 .

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享