使用odbc驱动sql server出现问题:连接占线导致另一个hstmt。跟connection对象有关

Connection con;
Statement sql,sql1;
//以下的url与问题无关
con=DriverManager.getConnection(url);
sql=con.createStatement();
sql1=con.createStatement();

以上是我的核心问题代码
主要问题是因为一个对象con被两个statement对象同时调用。
解决方法:
再添加一个con1对象,然后sql与sq1分别用两个不同的connect调用createStatement
以下是我的解决代码:

Connection con,con1;  
Statement sql,sql1;
con1=DriverManager.getConnection(url);
con=DriverManager.getConnection(url);
sql=con.createStatement();
sql1=con1.createStatement();

原理(摘抄网络):
这两个方法(sql与sql1)里都生成了preparedStatement这个对象,他们都要对数据库操作的,在调用第一个方法是没什么问题,可到了第二的方法时,由于第一方法里的preparedStatement没有关闭,它仍然占用了connection,从而导致了"连接占线导致另一个 hstmt"这样一个错误。

以上若有问题,望指点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用C++连接SQL Server需要使用ODBC API,具体步骤如下: 1. 包含头文件:在C++程序中,需要包含Windows头文件和ODBC头文件,如下所示: ```c++ #include <Windows.h> #include <sqlext.h> ``` 2. 定义变量:需要定义ODBC API中需要用到的变量,如下所示: ```c++ SQLHENV henv; // 环境句柄 SQLHDBC hdbc; // 数据库连接句柄 SQLHSTMT hstmt; // 语句句柄 SQLRETURN ret; // 返回值 ``` 3. 初始化ODBC环境:在使用ODBC API之前,需要初始化ODBC环境,如下所示: ```c++ SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); ``` 4. 连接SQL Server使用ODBC API中的SQLConnect函数连接SQL Server,如下所示: ```c++ SQLCHAR* dsn = (SQLCHAR*)"mydsn"; // 数据源名称 SQLCHAR* uid = (SQLCHAR*)"myusername"; // 用户名 SQLCHAR* pwd = (SQLCHAR*)"mypassword"; // 密码 SQLCHAR* server = (SQLCHAR*)"myserver"; // SQL Server名称 SQLCHAR* database = (SQLCHAR*)"mydatabase"; // 数据库名称 ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); ret = SQLConnect(hdbc, server, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); ret = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER); ``` 5. 执行SQL语句:使用ODBC API中的SQLExecDirect函数执行SQL语句,如下所示: ```c++ SQLCHAR* sql = (SQLCHAR*)"SELECT * FROM mytable"; ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); ret = SQLExecDirect(hstmt, sql, SQL_NTS); // 处理查询结果 // ... ``` 6. 释放资源:使用ODBC API中的SQLFreeHandle函数释放资源,如下所示: ```c++ SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); ``` 以上就是使用C++连接SQL Server的基本步骤,可以根据实际情况进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值