c语言实现对db2数据库的访问方法分享 (c访问db2数据库)
C语言实现对DB2数据库的访问方法分享
随着各种应用程序的出现,企业需求数据存储和管理的能力越来越重要。DB2数据库是IBM公司开发的一款强大、可扩展的关系数据库管理系统。它被广泛应用于企业级应用程序开发。C语言是一种底层语言,具有强大的控制和内存管理能力,能够很好地支持对数据存储的访问。本文将分享如何使用C语言实现对DB2数据库的访问。
1. 安装DB2客户端软件
为了使用C语言访问DB2数据库,需要先安装DB2客户端软件。该软件可从IBM官网下载。安装完成后,需要配置环境变量以便在C语言程序中调用DB2库函数。
2. 创建DB2数据库
使用DB2客户端软件连接到DB2数据库服务器,选择一个数据库实例。通过SQL语句创建一个新的数据库,在此新数据库中创建一个表格。这里我们以一个学生成绩管理系统为例,创建一个Student表格,包含以下字段:ID、Name、Age、Score1和Score2。
3. 链接到DB2数据库
在C语言程序中链接到DB2数据库,需要使用以下代码片段:
“`
#include
#include
#include
#include
#include
#include
#include
#include
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
SQLINTEGER id;
SQLCHAR name[30], score1[10], score2[10];
SQLINTEGER age;
SQLCHAR query[100];
int connect_db2_database()
{
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLCHAR dsn[10] = “mydsn”;
SQLCHAR userid[20] = “db2admin”;
SQLCHAR pwd[20] = “db2admin”;
ret = SQLConnect(dbc, dsn, SQL_NTS, userid, SQL_NTS, pwd, SQL_NTS);
if (ret == SQL_SUCCESS)
{
printf(“connect DB2 database success!\n”);
}else{
printf(“connect DB2 database fled!\n”);
}
return ret;
}
“`
在链接DB2数据库后,可以执行SQL语句查询数据库中的数据。在这里介绍两种查询数据库中数据的方法。
4. 查询方法一:使用SQLPrepare准备SQL语句
使用SQLPrepare准备SQL语句,在使用SQLExecute执行SQL语句查询数据库中的数据。以下是示例代码:
“`
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret == SQL_SUCCESS)
{
printf(“SQLAllocHandle success!\n”);
}
SQLCHAR *sql = “select id, name, age, score1, score2 from Student”;
ret = SQLPrepare(stmt, sql, SQL_NTS);
ret = SQLExecute(stmt);
while (SQLFetch(stmt) == SQL_SUCCESS)
{
ret = SQLGetData(stmt, 1, SQL_C_LONG, &id, sizeof(SQLINTEGER), NULL);
ret = SQLGetData(stmt, 2, SQL_C_CHAR, name, sizeof(name), NULL);
ret = SQLGetData(stmt, 3, SQL_C_LONG, &age, sizeof(SQLINTEGER), NULL);
ret = SQLGetData(stmt, 4, SQL_C_CHAR, score1, sizeof(score1), NULL);
ret = SQLGetData(stmt, 5, SQL_C_CHAR, score2, sizeof(score2), NULL);
printf(“%d\t%s\t%d\t%s\t%s\n”, id, name, age, score1, score2);
}
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
“`
SQLPrepare函数的之一个参数指定了SQL语句的预处理句柄,第二个参数是执行的SQL语句,第三个参数是SQL语句的长度。SQLExecute函数用于执行SQL语句。通过SQLFetch和SQLGetData函数可以获取SQL语句的结果。
5. 查询方法二:使用SQLExecDirect直接执行SQL语句
使用SQLExecDirect直接执行SQL语句,可以查询数据库中的数据。以下是示例代码:
“`
SQLCHAR *sql = “select id, name, age, score1, score2 from Student”;
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret == SQL_SUCCESS)
{
printf(“SQLAllocHandle success!\n”);
}
ret = SQLExecDirect(stmt, sql, SQL_NTS);
while (SQLFetch(stmt) == SQL_SUCCESS)
{
ret = SQLGetData(stmt, 1, SQL_C_LONG, &id, sizeof(SQLINTEGER), NULL);
ret = SQLGetData(stmt, 2, SQL_C_CHAR, name, sizeof(name), NULL);
ret = SQLGetData(stmt, 3, SQL_C_LONG, &age, sizeof(SQLINTEGER), NULL);
ret = SQLGetData(stmt, 4, SQL_C_CHAR, score1, sizeof(score1), NULL);
ret = SQLGetData(stmt, 5, SQL_C_CHAR, score2, sizeof(score2), NULL);
printf(“%d\t%s\t%d\t%s\t%s\n”, id, name, age, score1, score2);
}
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
“`
SQLExecDirect函数用于执行SQL语句。通过SQLFetch和SQLGetData函数可以获取SQL语句的结果。
6. 插入数据到数据库
使用以下代码可以将一个学生的信息插入到数据库中:
“`
SQLCHAR *sql = “INSERT INTO Student(ID, Name, Age, Score1, Score2) VALUES(?, ?, ?, ?, ?)”;
ret = SQLPrepare(stmt, sql, SQL_NTS);
id = 10000;
SQLCHAR* name = “张三”;
age = 20;
SQLCHAR* score1 = “90”;
SQLCHAR* score2 = “89”;
ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, sizeof(id), NULL);
ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, name, strlen(name), NULL);
ret = SQLBindParameter(stmt, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &age, sizeof(age), NULL);
ret = SQLBindParameter(stmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, score1, strlen(score1), NULL);
ret = SQLBindParameter(stmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, score2, strlen(score2), NULL);
ret = SQLExecute(stmt);
“`
SQLPrepare函数用于准备SQL语句,在使用SQLBindParameter函数绑定参数。最后使用SQLExecute函数执行SQL语句插入数据到数据库中。
7. 修改数据
使用以下代码可以修改一个学生的成绩信息:
“`
SQLCHAR *sql = “UPDATE Student SET Score1 = ?, Score2 = ? WHERE ID = ?”;
ret = SQLPrepare(stmt, sql, SQL_NTS);
SQLCHAR* score1 = “91”;
SQLCHAR* score2 = “95”;
id = 10000;
ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, score1, strlen(score1), NULL);
ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, score2, strlen(score2), NULL);
ret = SQLBindParameter(stmt, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, sizeof(id), NULL);
ret = SQLExecute(stmt);
“`
SQL语句通过UPDATE关键字更新数据库中记录的内容。
8. 删除数据
使用以下代码删除一个学生的信息:
“`
SQLCHAR *sql = “DELETE FROM Student WHERE ID = ?”;
ret = SQLPrepare(stmt, sql, SQL_NTS);
id = 10000;
ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, sizeof(id), NULL);
ret = SQLExecute(stmt);
“`
SQL语句通过DELETE FROM关键字删除数据库中的记录。