C语言轻松调用数据库数据 (c 中调用数据库中的数据)
随着云计算和大数据时代的到来,数据的处理变得越来越重要。现在,几乎所有的应用程序都需要与数据库进行交互,而应用程序开发人员也需要学会如何轻松调用数据库数据。
C语言是一种强大的编程语言,它被广泛用于系统级应用程序的开发。C语言也可以用于数据库编程,通过使用一些库和API,C语言开发人员可以轻松地连接数据库、查询数据、插入数据和更新数据。
一些常用的数据库引擎,比如MySQL和PostgreSQL,都提供了适用于C语言的API,这些API可以让C语言开发人员直接调用数据库。在本文中,我们将使用MySQL数据库举例来说明如何在C语言中调用数据库数据。
连接MySQL数据库
在使用C语言调用MySQL数据库之前,我们需要先建立与MySQL数据库的连接,这可以通过SQLConnect()函数来实现。SQLConnect()函数的之一个参数是一个指向ODBC连接的句柄,第二个参数是连接的DSN(数据源名称),第三个参数是用户名,第四个参数是密码。
以下是一个示例代码段,演示如何通过C语言连接MySQL数据库:
“`c
#include
#include
#include
int mn(int argc, char *argv[]) {
SQLHENV henv;
SQLHDBC hdbc;
SQLRETURN ret;
SQLCHAR outstr[1024];
SQLALLINT outstrlen;
// Allocate environment handle
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
// Set the ODBC version number
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
// Allocate connection handle
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// Connect to the data source
ret = SQLConnect(hdbc, (SQLCHAR*)”datasource”, SQL_NTS, (SQLCHAR*)”username”, SQL_NTS, (SQLCHAR*)”password”, SQL_NTS);
// Allocate statement handle
SQLHSTMT hstmt;
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// Do something with the database
// Clean up
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
“`
在上面的代码中,我们首先分配了一个ODBC环境句柄,然后设置了ODBC版本号,并分配了一个ODBC连接句柄。接着,我们使用SQLConnect()函数连接到MySQL数据库,然后分配一个ODBC语句句柄。
查询数据
在连接到MySQL数据库之后,我们可以使用SQLExecDirect()函数来执行SQL语句并查询数据。这个函数的之一个参数是ODBC语句句柄,第二个参数是一个指向包含要执行的SQL语句的字符串的指针,第三个参数是包含SQL语句长度的整数。
以下代码段演示了如何查询MySQL数据库中的数据:
“`c
SQLCHAR* query = “SELECT * FROM employees”;
SQLLEN queryLen = strlen(query);
// Execute the query
SQLRETURN ret = SQLExecDirect(hstmt, query, queryLen);
// Process the results
SQLCHAR name[512];
SQLLEN nameLen;
SQLINTEGER age;
SQLLEN ageLen;
while (SQLFetch(hstmt) == SQL_SUCCESS) {
SQLGetData(hstmt, 1, SQL_C_CHAR, name, 512, &nameLen);
SQLGetData(hstmt, 2, SQL_C_LONG, &age, sizeof(age), &ageLen);
printf(“%s, %d”, name, age);
}
“`
在上面的代码中,我们首先定义了一个指向SQL语句的指针,并使用strlen()函数获取了SQL语句的长度。然后,我们使用SQLExecDirect()函数执行SQL语句,并使用SQLFetch()函数逐行取回数据。
我们使用SQLGetData()函数将数据存储到C语言变量中,并打印出来。
插入数据
除了查询数据之外,我们还可以通过C语言向MySQL数据库中插入数据。这可以使用SQLBindParameter()函数来绑定SQL语句中的参数,并使用SQLExecute()函数执行SQL语句。
以下代码段演示了如何向MySQL数据库插入数据:
“`c
SQLCHAR* query = “INSERT INTO employees (name, age) VALUES (?, ?)”;
SQLLEN queryLen = strlen(query);
SQLINTEGER age = 30;
SQLLEN ageLen = sizeof(age);
SQLCHAR name[512] = “John Smith”;
SQLLEN nameLen = strlen(name);
// Prepare the statement
SQLPrepare(hstmt, query, queryLen);
// Bind the parameters
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 512, 0, name, nameLen, &nameLen);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &age, sizeof(age), &ageLen);
// Execute the query
SQLRETURN ret = SQLExecute(hstmt);
“`
在上面的代码中,我们首先定义了一个指向SQL语句的指针,并使用strlen()函数获取了SQL语句的长度。然后,我们使用SQLPrepare()函数准备SQL语句,使用SQLBindParameter()函数绑定SQL语句中的参数,并使用SQLExecute()函数执行SQL语句。
更新数据
我们可以使用C语言更新MySQL数据库中的数据。这可以使用SQLExecDirect()函数来执行SQL UPDATE语句,并使用SQLRowCount()函数获取影响的行数。
以下代码段演示了如何更新MySQL数据库中的数据:
“`c
SQLCHAR* query = “UPDATE employees SET age = 35 WHERE name = ‘John Smith'”;
SQLLEN queryLen = strlen(query);
// Execute the query
SQLRETURN ret = SQLExecDirect(hstmt, query, queryLen);
// Get the number of rows affected
SQLLEN rowCount;
SQLRowCount(hstmt, &rowCount);
printf(“%d rows updated”, rowCount);
“`
在上面的代码中,我们定义了一个指向SQL语句的指针,并使用strlen()函数获取了SQL语句的长度。然后,我们使用SQLExecDirect()函数执行SQL UPDATE语句,并使用SQLRowCount()函数获取影响的行数。
结论