📅  最后修改于: 2023-12-03 14:49:47.987000             🧑  作者: Mango
在C/C++语言中,有很多库可以用来连接数据库,如ODBC、MySQL Connector/C++、PostgreSQL、SQLite等。这些库提供了API,允许程序员使用C/C++语言操作数据库,进行数据的读取、写入、修改等操作。
ODBC(Open Database Connectivity)是由微软开发的一种数据库接口标准,提供了一种通用的关系型数据库的访问方法。几乎所有的关系型数据库都可以通过ODBC进行访问。
可以通过ODBC的API实现数据库连接和操作,以下是ODBC连接数据库的基本步骤:
下面是C/C++使用ODBC连接MySQL数据库的范例代码:
#include <sql.h>
#include <sqlext.h>
//连接数据库
SQLCHAR* conn_str =
(SQLCHAR*)"DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=localhost;DATABASE=testdb;UID=root;PWD=123456;OPTION=3";
SQLHENV hEnv = NULL;
SQLHDBC hDbc = NULL;
SQLHSTMT hStmt = NULL;
SQLRETURN ret;
SQLCHAR Buf[1024];
//加载ODBC驱动程序
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
//打开数据库连接
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
ret = SQLDriverConnect(hDbc, NULL, conn_str, SQL_NTS,
Buf, 1024, NULL, SQL_DRIVER_COMPLETE);
//执行SQL语句
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
SQLExecDirect(hStmt, (SQLCHAR*)"select * from test", SQL_NTS);
while (SQLFetch(hStmt) == SQL_SUCCESS) {
SQLGetData(hStmt, 1, SQL_C_ULONG, &num, 0, NULL);
SQLGetData(hStmt, 2, SQL_C_CHAR, str, 1024, NULL);
printf("%lu\t%s\n", num, str);
}
//关闭数据库连接
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
MySQL Connector/C++是一个面向对象的C++驱动程序库,用于连接MySQL数据库。使用MySQL Connector/C++连接MySQL数据库可以采用MySQL C API或者JDBC API方式,支持Windows、Linux、Mac OS X等操作系统。
以下是C/C++使用MySQL Connector/C++连接MySQL数据库的范例代码:
#include <iostream>
#include <string>
// 引入MySQL Connector/C++库
#include "mysqlx/xdevapi.h"
using namespace std;
using namespace mysqlx;
int main()
{
// 连接MySQL数据库
Session sess("localhost", 33060, "root", "123456");
// 执行SQL语句
string sql = "SELECT * FROM testdb.test";
RowResult res = sess.sql(sql).execute();
// 输出结果
cout << "Record count: " << res.count() << endl;
for (auto r : res)
{
cout << r[0] << "\t" << r[1] << endl;
}
return 0;
}
PostgreSQL是一个强大的开源对象-关系型数据库,支持大部分的SQL标准,其数据库适用于高并发、大数据存储等需求。在C/C++语言中,可以使用libpq库来连接PostgreSQL数据库。
以下是C/C++使用libpq连接PostgreSQL数据库的范例代码:
#include <iostream>
#include <string>
// 引入libpq库
#include <libpq-fe.h>
using namespace std;
int main()
{
// 连接PostgreSQL数据库
PGconn* conn = PQconnectdb("user=postgres dbname=testdb password=123456 hostaddr=127.0.0.1 port=5432");
// 执行SQL语句
string sql = "SELECT * FROM test";
PGresult* res = PQexec(conn, sql.c_str());
// 输出结果
int rows = PQntuples(res);
int cols = PQnfields(res);
cout << "Record count: " << rows << endl;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << PQgetvalue(res, i, j) << "\t";
}
cout << endl;
}
// 释放资源
PQclear(res);
PQfinish(conn);
return 0;
}
SQLite是一个轻量级的数据库管理系统,支持大部分的SQL标准,适用于嵌入式设备和移动设备等场景。在C/C++语言中,可以使用SQLite的C API来连接数据库。
以下是C/C++使用SQLite连接数据库的范例代码:
#include <iostream>
#include <string>
// 引入SQLite的C API库
#include <sqlite3.h>
using namespace std;
int main()
{
// 打开SQLite数据库
sqlite3* db;
sqlite3_open("test.db", &db);
// 执行SQL语句
string sql = "SELECT * FROM test";
sqlite3_stmt* stmt;
sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, NULL);
int ret = sqlite3_step(stmt);
// 输出结果
while (ret == SQLITE_ROW)
{
int num = sqlite3_column_int(stmt, 0);
const unsigned char* str = sqlite3_column_text(stmt, 1);
cout << num << "\t" << str << endl;
ret = sqlite3_step(stmt);
}
// 释放资源
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
本文介绍了使用C/C++连接数据库的几种方式,包括ODBC、MySQL Connector/C++、PostgreSQL、SQLite四种库。开发者可以根据不同的实际需求选择相应的库来连接数据库,并根据库提供的API进行操作。无论采用哪种方式,连接数据库的基本步骤都是相似的,开发者掌握了这些步骤之后,就可以轻松实现C/C++程序与数据库的交互。