c,#include,#includeint main() {, MYSQL conn;, conn = mysql_init(NULL);, if (conn == NULL) {, fprintf(stderr, "mysql_init() failedn");, return 1;, } if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) {, fprintf(stderr, "mysql_real_connect() failedn");, mysql_close(conn);, return 1;, } printf("Connected to database successfully!n");, mysql_close(conn);, return 0;,},
“
在C语言中连接数据库,主要有ODBC、MySQL C API和SQLite这几种方式。
1、安装ODBC驱动:
在Windows系统上,可以通过“控制面板 -> 管理工具 -> 数据源 (ODBC)”来管理ODBC驱动。
在Linux系统上,可以使用unixODBC。
2、配置数据源名称(DSN):
在使用ODBC连接数据库之前,需要配置数据源名称(DSN),这可以通过ODBC管理工具来完成,DSN包含了数据库连接的配置信息,如数据库类型、服务器地址、数据库名称、用户和密码等。
3、使用C代码连接数据库:
以下是一个使用ODBC连接数据库的C代码示例:
#include <stdio.h> #include <stdlib.h> #include <sql.h> #include <sqlext.h> void check_error(SQLRETURN ret, SQLSMALLINT handleType, SQLHANDLE handle) { if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { SQLCHAR sqlState[6], message[SQL_MAX_MESSAGE_LENGTH]; SQLINTEGER nativeError; SQLSMALLINT messageLength; SQLGetDiagRec(handleType, handle, 1, sqlState, &nativeError, message, sizeof(message), &messageLength); fprintf(stderr, "Error: %s ", message); exit(EXIT_FAILURE); } } int main() { SQLHENV env; SQLHDBC dbc; SQLHSTMT stmt; SQLRETURN ret; // Allocate an environment handle ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); check_error(ret, SQL_HANDLE_ENV, env); // Set the ODBC version environment attribute ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void )SQL_OV_ODBC3, 0); check_error(ret, SQL_HANDLE_ENV, env); // Allocate a connection handle ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); check_error(ret, SQL_HANDLE_DBC, dbc); // Connect to the DSN named "DSNName" ret = SQLConnect(dbc, (SQLCHAR )"DSNName", SQL_NTS, (SQLCHAR )"username", SQL_NTS, (SQLCHAR )"password", SQL_NTS); check_error(ret, SQL_HANDLE_DBC, dbc); // Allocate a statement handle ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); check_error(ret, SQL_HANDLE_STMT, stmt); // Execute a SQL query ret = SQLExecDirect(stmt, (SQLCHAR )"SELECT FROM table_name", SQL_NTS); check_error(ret, SQL_HANDLE_STMT, stmt); // Fetch and display the result set SQLCHAR col1[256], col2[256]; while (SQLFetch(stmt) == SQL_SUCCESS) { SQLGetData(stmt, 1, SQL_C_CHAR, col1, sizeof(col1), NULL); SQLGetData(stmt, 2, SQL_C_CHAR, col2, sizeof(col2), NULL); printf("%s, %s ", col1, col2); } // Clean up SQLFreeHandle(SQL_HANDLE_STMT, stmt); SQLDisconnect(dbc); SQLFreeHandle(SQL_HANDLE_DBC, dbc); SQLFreeHandle(SQL_HANDLE_ENV, env); return 0; }
1、安装MySQL开发库:
在Debian或Ubuntu系统上,可以使用以下命令安装MySQL开发库:sudo apt-get install libmysqlclient-dev
。
在CentOS或Red Hat系统上,可以使用以下命令安装MySQL开发库:sudo yum install mysql-devel
。
2、使用C代码连接数据库:
以下是一个使用MySQL C API连接数据库的C代码示例:
#include <mysql/mysql.h> #include <stdio.h> #include <stdlib.h> int main() { MYSQL conn; MYSQL_RES res; MYSQL_ROW row; char server = "localhost"; char user = "root"; char password = "your_password"; / set me first / char database = "your_database"; conn = mysql_init(NULL); / Connect to database / if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s ", mysql_error(conn)); exit(1); } / send SQL query / if (mysql_query(conn, "show tables")) { fprintf(stderr, "%s ", mysql_error(conn)); exit(1); } res = mysql_use_result(conn); / output table name / printf("MySQL Tables in %s database: ", database); while ((row = mysql_fetch_row(res)) != NULL) printf("%s ", row[0]); / close connection / mysql_free_result(res); mysql_close(conn); return 0; }
1、安装SQLite开发库:
在Ubuntu上,可以使用以下命令安装SQLite开发库:sudo apt-get install libsqlite3-dev
。
在CentOS上,可以使用以下命令安装SQLite开发库:sudo yum install sqlite-devel
。
2、使用C代码连接数据库:
以下是一个使用SQLite连接数据库的C代码示例:
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> int main() { sqlite3 db; char err_msg = 0; int rc = sqlite3_open("test.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } char sql = "CREATE TABLE IF NOT EXISTS Cars(Id INT, Name TEXT, Price INT);" "INSERT INTO Cars VALUES(1, 'Audi', 52642);" "INSERT INTO Cars VALUES(2, 'Mercedes', 57127);" "INSERT INTO Cars VALUES(3, 'Skoda', 9000);" "INSERT INTO Cars VALUES(4, 'Volvo', 29000);" "INSERT INTO Cars VALUES(5, 'Bentley', 350000);"; 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); return 1; } sqlite3_close(db); return 0; }