c,#include,#includeint main() {, MYSQL *conn;, MYSQL_RES *res;, MYSQL_ROW row; const char *server = "localhost";, const char *user = "root";, const char *password = "your_password";, const char *database = "testdb"; conn = mysql_init(NULL);, if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {, fprintf(stderr, "%sn", mysql_error(conn));, return 1;, } // Your SQL query here, if (mysql_query(conn, "SELECT * FROM your_table")) {, fprintf(stderr, "%sn", mysql_error(conn));, return 1;, } res = mysql_use_result(conn);, while ((row = mysql_fetch_row(res)) != NULL) {, printf("%s n", row[0]);, } mysql_free_result(res);, mysql_close(conn); return 0;,},
“在C语言中,连接数据库通常需要使用特定的库,对于MySQL数据库,可以使用MySQL Connector/C库;对于SQLite数据库,可以使用SQLite3库,下面以MySQL和SQLite为例,分别展示如何在C语言中编写数据库连接代码。
一、使用MySQL Connector/C连接MySQL数据库
1、安装MySQL Connector/C
在Linux系统上,可以使用包管理器安装,例如在Ubuntu上:
sudo apt-get install libmysqlclient-dev
在Windows系统上,可以从[MySQL官网](https://dev.mysql.com/downloads/connector/c/)下载并安装相应的安装包。
2、示例代码
#include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; // 初始化连接句柄 conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); exit(1); } // 连接到数据库 if (mysql_real_connect(conn, "localhost", "root", "password", "testdb", 0, NULL, 0) == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); mysql_close(conn); exit(1); } // 执行查询 if (mysql_query(conn, "SELECT id, name FROM users")) { fprintf(stderr, "%s ", mysql_error(conn)); mysql_close(conn); exit(1); } res = mysql_use_result(conn); while ((row = mysql_fetch_row(res)) != NULL) { printf("ID: %s, Name: %s ", row[0], row[1]); } // 释放结果集和关闭连接 mysql_free_result(res); mysql_close(conn); return 0; }
上述代码中,首先初始化连接句柄mysql_init
,然后使用mysql_real_connect
函数连接到数据库,成功连接后,通过mysql_query
执行SQL查询语句,最后使用mysql_fetch_row
遍历查询结果并打印出来。
二、使用SQLite3连接SQLite数据库
1、安装SQLite3库
在大多数Linux发行版中,可以通过包管理器安装,例如在Ubuntu上:
sudo apt-get install libsqlite3-dev
在Windows系统上,可以从[SQLite官网](https://www.sqlite.org/download.html)下载预编译的库文件。
2、示例代码
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> int main() { sqlite3 *db; char *err_msg = NULL; int rc; // 打开数据库(如果不存在则创建) rc = sqlite3_open("test.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } // 执行SQL语句创建表(如果表不存在) const char *sql = "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT);"; rc = sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", err_msg); sqlite3_free(err_msg); sqlite3_close(db); exit(1); } // 插入数据 sql = "INSERT INTO users (name) VALUES ('John Doe');"; rc = sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", err_msg); sqlite3_free(err_msg); } else { printf("Records created successfully "); } // 查询数据 sql = "SELECT id, name FROM users;"; rc = sqlite3_exec(db, sql, callback, 0, &err_msg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", err_msg); sqlite3_free(err_msg); } // 关闭数据库连接 sqlite3_close(db); return 0; } static int callback(void *NotUsed, int argc, charargv, charazColName) { for (int i = 0; i < argc; i++) { printf("%s = %s ", azColName[i], argv[i] ? argv[i] : "NULL"); } printf(" "); return 0; }
上述代码中,首先使用sqlite3_open
函数打开(或创建)一个SQLite数据库文件,然后通过sqlite3_exec
函数执行SQL语句来创建表、插入数据和查询数据,查询结果通过回调函数callback
进行处理并打印出来,最后关闭数据库连接。
FAQs
问题1:如何在C语言中使用MySQL Connector/C连接远程MySQL数据库?
答:在使用mysql_real_connect
函数时,需要指定正确的主机名(hostname)、用户名(username)、密码(password)、数据库名(database)以及端口号(port)。mysql_real_connect(conn, "remote_host", "user", "pass", "dbname", 3306, NULL, 0)
,确保远程数据库服务器允许从本地客户端进行连接,并且防火墙设置允许相应的端口通信。
问题2:在SQLite中如何实现事务处理?
答:在SQLite中,可以通过BEGIN TRANSACTION
开始一个事务,使用一系列的SQL操作,然后使用COMMIT
提交事务或者ROLLBACK
回滚事务。
sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL); // 执行一系列SQL操作... if (all_operations_successful) { sqlite3_exec(db, "COMMIT;", NULL, NULL, NULL); } else { sqlite3_exec(db, "ROLLBACK;", NULL, NULL, NULL); }
这样可以确保一组相关的操作要么全部成功,要么全部失败,从而保持数据的一致性。
小编有话说
无论是连接MySQL还是SQLite数据库,在C语言中都需要正确安装相应的库,并按照库提供的API函数进行编程,要注意错误处理和资源管理,确保程序的稳定性和可靠性,希望以上内容对您有所帮助!
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1601006.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复