在C语言中操控数据库,通常需要借助特定的库和API来实现,以下是几种常见的方法及其语法示例:
1、使用MySQL API
安装MySQL开发库:在Linux系统中,可以使用命令sudo apt-get install libmysqlclient-dev
来安装。
连接到MySQL数据库:使用mysql_real_connect
函数进行连接。
MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); exit(1); } if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); mysql_close(conn); exit(1); }
执行SQL语句:使用mysql_query
函数执行SQL语句。
if (mysql_query(conn, "SELECT * FROM test_table")) { fprintf(stderr, "%s ", mysql_error(conn)); mysql_close(conn); exit(1); }
处理结果集:使用mysql_store_result
获取结果集,并使用mysql_fetch_row
逐行读取数据。
MYSQL_RES *res; MYSQL_ROW row; res = mysql_store_result(conn); if (res == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); mysql_close(conn); exit(1); } while ((row = mysql_fetch_row(res)) != NULL) { printf("%s ", row[0]); } mysql_free_result(res);
关闭连接:使用mysql_close
函数关闭连接。
mysql_close(conn);
2、使用SQLite API
安装SQLite开发库:在Linux系统中,可以使用命令sudo apt-get install libsqlite3-dev
来安装。
连接到SQLite数据库:使用sqlite3_open
函数打开数据库文件。
sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if (rc) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully "); }
执行SQL语句:使用sqlite3_exec
函数执行SQL语句,并通过回调函数处理查询结果。
static int callback(void *data, int argc, charargv, charazColName) { int i; for (i = 0; i < argc; i++) { printf("%s = %s ", azColName[i], argv[i] ? argv[i] : "NULL"); } printf(" "); return 0; } const char *sql = "SELECT * from COMPANY"; rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully "); }
关闭数据库连接:使用sqlite3_close
函数关闭数据库连接。
sqlite3_close(db);
3、使用ODBC接口
安装ODBC库:在Linux系统中,可以使用命令sudo apt-get install unixodbc unixodbc-dev
来安装。
配置ODBC数据源:编辑odbc.ini
和odbcinst.ini
文件,配置数据源和ODBC驱动。
连接到数据库:使用SQLConnect
函数连接到数据库。
SQLHENV env; SQLHDBC dbc; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); SQLDriverConnect(dbc, NULL, (SQLCHAR*)"DSN=mydsn;UID=user;PWD=pass;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
执行SQL语句:使用SQLExecDirect
函数执行SQL语句。
SQLHSTMT stmt; SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM mytable", SQL_NTS);
处理结果集:使用SQLFetch
函数获取查询结果,并通过SQLGetData
函数读取数据。
char col1[256]; while (SQL_SUCCEEDED(ret = SQLFetch(stmt))) { SQLGetData(stmt, 1, SQL_C_CHAR, col1, sizeof(col1), NULL); printf("Column 1: %s ", col1); }
断开连接并释放资源:使用SQLDisconnect
、SQLFreeHandle
等函数断开连接并释放资源。
在C语言中操控数据库,无论是通过MySQL API、SQLite API还是ODBC接口,都需要遵循一定的步骤和语法规则,这些步骤包括安装相应的库、连接到数据库、执行SQL语句、处理结果集以及关闭连接和释放资源,通过合理地运用这些技术,可以在C语言中高效地实现对数据库的操控。