ODBC API不能釋放Oracle資料庫連線

2021-06-16 04:01:29 字數 1035 閱讀 8965

odbc api開啟資料庫連線,一般用: sqldriverconnect

關閉資料庫連線用: sqldisconnect

但是要精細控制,需要設定連線資料庫handle的屬性,比如比較普通的有版本號,超時時間等等。

最近程式設計發現,用關閉資料庫還不能釋放。看樣子是釋放成功了,但用oracle的管理工具看,或者看v$session表,發現連線還存在,狀態是inactive。

怎麼辦?

開啟odbc的***,執行單元測試程式xisql測試,看log,發現有列印:

xisqlbe4-cd4 enter sqlsetenvattr

sqlhenv             00000000

sqlinteger                 201

sqlpointer          [unknown attribute 201]

sqlinteger                   0

看看這個unknown引數是什麼?原來是: sql_attr_connection_pooling, 也就是給odbc環境加了緩衝池。

不呼叫這個,可以正常釋放。

但是,用複雜的服務程式,發現還是釋放不了,看log,有:

vwserverd24-8ac exit  sqldisconnect  with return code -1 (sql_error)

hdbc                00aa1758

diag [25000] [oracle][odbc]invalid transaction state. (0)

看樣子是事務沒有釋放,就呼叫: sqlendtran, 然後再釋放吧,ok了。

為什麼呢?

因為服務程式的資料庫連線都用: sqlsetconnectattr, 將連線屬性設定成不自動提交的。而簡單的單元測試程式預設就是每執行完一條語句就立即提交的。

看來oracle資料庫在釋放之前,不管你是否用了資料庫修改,就是只呼叫select語句,呼叫一下結束事務也是必要的。

JDBC連Oracle資料庫

string drivername oracle.jdbc.driver.oracledriver string url jdbc oracle thin 172.28.139.78 1521 oracts string username scott string password tiger tr...

oracle 資料庫的 左連 和 右連

a 資訊表 裡面有計畫表id b 計畫表 現在要查詢關聯的id的字段 並且 資訊表沒有 計畫id的資料 用到這個左 因為 資訊表在左 就可以查詢出來 select a.from yt tdkb xxlr a left join yt tdkb jhb b on a.fxxjhsjid b.fid 如...

vc 使用odbc api連線資料庫

初次寫部落格,不知道效果怎樣,我希望在這裡,能和大家共同建立起乙個交流平台,技術 include include include include int main catch sqlallochandle sql handle stmt,hdbc,hstmt sqlchar sql select f...