在Linux下使用C++连接数据库,通常有以下几种方式:
- 使用MySQL C API:
MySQL官方提供了一个C语言编写的API,可以用于连接和操作MySQL数据库。首先需要安装MySQL的开发库,然后使用以下代码示例进行连接:
#include
#include
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, "localhost", "username", "password", "database_name", 0, NULL, 0)) {
std::cerr << "Error: unable to connect to database" << std class="hljs-built_in">exit(1);
}
if (mysql_query(conn, "SHOW TABLES")) {
std::cerr << "Error: query failed" << std class="hljs-built_in">exit(1);
}
res = mysql_store_result(conn);
while ((row = mysql_fetch_row(res))) {
std::cout << row class="hljs-number">0] << std class="hljs-built_in">mysql_free_result(res);
mysql_close(conn);
return 0;
}
- 使用SQLite C/C++ API:
SQLite是一个轻量级的嵌入式数据库,它的API支持C和C++。首先需要安装SQLite的开发库,然后使用以下代码示例进行连接:
#include
#include
static int callback(void *data, int argc, char **argv, char **azColName) {
for (int i = 0; i < argc class="hljs-string">": " << (argv[i] ? argv[i] : "NULL") << std class="hljs-keyword">return 0;
}
int main() {
sqlite3 *db;
char *err_msg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
std::cerr << "Error: unable to open database" << std class="hljs-built_in">sqlite3_close(db);
exit(1);
}
rc = sqlite3_exec(db, "SELECT * FROM users", callback, 0, &err_msg);
if (rc != SQLITE_OK) {
std::cerr << "Error: query failed" << std class="hljs-built_in">sqlite3_free(err_msg);
sqlite3_close(db);
exit(1);
}
sqlite3_close(db);
return 0;
}
- 使用第三方库:
还有一些第三方库可以用于连接数据库,例如MySQL++、SOCI等。这些库通常提供了更高级的抽象和更好的易用性。以MySQL++为例,首先需要安装MySQL++的开发库,然后使用以下代码示例进行连接:
#include
#include
int main() {
mysqlpp::Connection conn(false);
if (conn.connect("database_name", "localhost", "username", "password")) {
std::cout << "Connected to database" << std class="hljs-keyword">else {
std::cerr << "Error: unable to connect to database" << std class="hljs-built_in">exit(1);
}
mysqlpp::Query query = conn.query();
query << "SELECT * FROM users";
mysqlpp::StoreQueryResult result = query.store();
for (size_t i = 0; i < result class="hljs-built_in">num_rows(); ++i) {
std::cout << result class="hljs-string">"username"] << std class="hljs-keyword">return 0;
}
注意:在使用这些库之前,请确保已经安装了相应的开发库和头文件。在编译时,需要链接相应的库文件。例如,对于MySQL C API,可以使用-lmysqlclient选项进行链接。