C++ ODBC 封装工具类的示例
时间: 2023-10-24 20:08:50 浏览: 57
当然,这里是一个简单的示例,展示了如何使用C++封装ODBC的工具类:
```cpp
#include <iostream>
#include <sql.h>
#include <sqlext.h>
class ODBCWrapper {
public:
ODBCWrapper();
~ODBCWrapper();
bool Connect(const std::string& connectionString);
bool Disconnect();
bool Execute(const std::string& query);
bool Fetch();
int GetInt(int column);
std::string GetString(int column);
private:
SQLHENV m_env;
SQLHDBC m_conn;
SQLHSTMT m_stmt;
};
ODBCWrapper::ODBCWrapper() : m_env(nullptr), m_conn(nullptr), m_stmt(nullptr) {
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_env);
SQLSetEnvAttr(m_env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, m_env, &m_conn);
}
ODBCWrapper::~ODBCWrapper() {
Disconnect();
SQLFreeHandle(SQL_HANDLE_DBC, m_conn);
SQLFreeHandle(SQL_HANDLE_ENV, m_env);
}
bool ODBCWrapper::Connect(const std::string& connectionString) {
SQLCHAR connStrOutput[256];
SQLSMALLINT connStrOutputSize;
SQLDriverConnect(m_conn, NULL, (SQLCHAR*)connectionString.c_str(), SQL_NTS,
connStrOutput, sizeof(connStrOutput), &connStrOutputSize, SQL_DRIVER_COMPLETE);
if (SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_STMT, m_conn, &m_stmt))) {
return true;
}
return false;
}
bool ODBCWrapper::Disconnect() {
if (m_stmt != nullptr) {
SQLFreeHandle(SQL_HANDLE_STMT, m_stmt);
m_stmt = nullptr;
}
if (m_conn != nullptr) {
SQLDisconnect(m_conn);
return SQL_SUCCEEDED(SQLFreeHandle(SQL_HANDLE_DBC, m_conn));
}
return false;
}
bool ODBCWrapper::Execute(const std::string& query) {
if (SQL_SUCCEEDED(SQLExecDirect(m_stmt, (SQLCHAR*)query.c_str(), SQL_NTS))) {
return true;
}
return false;
}
bool ODBCWrapper::Fetch() {
if (SQL_SUCCEEDED(SQLFetch(m_stmt))) {
return true;
}
return false;
}
int ODBCWrapper::GetInt(int column) {
int value;
SQLGetData(m_stmt, column, SQL_C_SLONG, &value, sizeof(value), nullptr);
return value;
}
std::string ODBCWrapper::GetString(int column) {
SQLCHAR value[256];
SQLLEN indicator;
SQLGetData(m_stmt, column, SQL_C_CHAR, value, sizeof(value), &indicator);
return std::string((const char*)value);
}
int main() {
ODBCWrapper odbc;
if (odbc.Connect("DRIVER={SQL Server};SERVER=localhost;DATABASE=mydatabase;UID=myusername;PWD=mypassword")) {
if (odbc.Execute("SELECT * FROM mytable")) {
while (odbc.Fetch()) {
int id = odbc.GetInt(1);
std::string name = odbc.GetString(2);
std::cout << "ID: " << id << ", Name: " << name << std::endl;
}
}
odbc.Disconnect();
}
return 0;
}
```
这个示例展示了一个简单的ODBC封装工具类`ODBCWrapper`,它使用ODBC API来连接数据库、执行查询语句并获取结果。你可以根据自己的需要进行修改和扩展。