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()函数获取影响的行数。

结论


数据运维技术 » C语言轻松调用数据库数据 (c 中调用数据库中的数据)