jdbc connection是否可以建立多個statement
關於Statement物件:
前面說過,Statement物件是用來繫結要執行的操作的,在它上面有三種執行方法:
即用來執行查詢操作的executeQuery(),用來執行更新操作的executeUpdate()和用來執行
動態的未知的操作的execute().
JDBC在編譯時並不對要執行的SQL語句檢測,只是把它看著一個String,只有在驅動
程式執行SQL語句時才知道正確與否.
一個Statement物件同時只能有一個結果集在活動.這是寬容性的,就是說即使沒有
呼叫ResultSet的close()方法,只要開啟第二個結果集就隱含著對上一個結果集的關閉.所以
如果你想同時對多個結果集操作,就要建立多個Statement物件,如果不需要同時操作,那麼可
以在一個Statement物件上須序操作多個結果集.
這裡我不得不特別說明一下,很多人會用一個Statement進行巢狀查詢,然後就來問
我說為什麼不能迴圈?道理上面已經說清楚了.我們來詳細分析一下巢狀查詢:
Connection conn = null;
Statement stmt = null;
conn = .......;
stmt = conm.createStatement(xxxxxx);
ResultSet rs = stmt.executeQuery(sql1);
while(rs.next()){
str = rs.getString(xxxxx);
ResultSet rs1 = stmt.executeQuery(\"select * from 表 where 欄位=str\");
}
當stmt.executeQuery(\"select * from 表 where 欄位=str\");賦給rs1時,這時隱含的操作
是已經關閉了rs,你還能迴圈下去嗎?
所以如果要同時操作多個結果集一定要讓它他繫結到不同的Statement物件上.好在一個connection
物件可以建立任意多個Statement物件,而不需要你重新獲取連結.
另外PreparedStatement還支援接收引數.在預編譯後只要傳輸不同的引數就可以執行,大大
提高了效能.
PreparedStatement ps = conn.prepareStatement(\"select * from 表 where 欄位=?\");
ps.setString(1,引數);
ResultSet rs = ps.executeQuery();
CallableStatement:是PreparedStatement的子類,它只是用來執行儲存過程的.
CallableStatement sc = conn.prepareCall(\"{call query()}\");
ResultSet rs = cs.executeQuery();
相關文章
- jdbc Statement和PrepareStatement操作JDBCREST
- JDBC入門(一):Statement物件JDBC物件
- JDBC - Statement物件 - executeBatch()和executeUpdate()JDBC物件BAT
- JDBC Connection Pool Example (轉)JDBC
- JDBC之Statement,PreparedStatement,CallableStatement的區別JDBC
- JDBC TM入門指南6--Parepared Statement (轉)JDBC
- 多個資料庫是否可以共有一個Oracle 11g RAC例項KG資料庫Oracle
- PbootCMS授權碼是否可以用於多個伺服器?授權碼是否可以用於不同作業系統?boot伺服器作業系統
- Oracle Universal Connection Pool(UCP) for JDBC 詳解OracleJDBC
- 常見故障之八:JDBC Connection PoolsJDBC
- Connection (建立連線)
- MySQL JDBC 出現多個 SHOW VARIABLES 語句。MySqlJDBC
- 多個model共用一個service可以嗎
- 怎樣實現關閉connection時自動關閉Statement和ResultSet
- org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection 解決辦法SpringFrameworkJDBCOTGExceptionAI
- Mysql異常刨析:Could not commit JDBC transaction;No operations allowed after statement closedMySqlMITJDBC
- 多個控制檔案的建立
- LEADTOOLS的新功能Document Composer可以讓你在多個檔案中建立文件
- 可怕,居然可以配置多個git sshkeyGit
- Statement
- 建立多個H5應用H5
- 如何用python判斷列表中是否包含多個字串中的一個或多個?Python字串
- 多個Context 下事務 可以控制嗎?Context
- Entity中是否可以引用Repository
- ORACLE RAC 心跳是否可以直連Oracle
- 使用 Python 迴圈建立多個列表Python
- 開多個JVM進行並行處理是否可行?JVM並行
- 被問懵了:一個程式最多可以建立多少個執行緒?執行緒
- IPTV系統一個後臺可以有多個apk介面嗎?APK
- 代理IP是否可以按用途分類
- 使用代理IP是否可以保持匿名性?
- fork同時建立多個子程式的方法
- 【轉】[C#] 建立返回多個值的方法C#
- 如何判斷一個字串是否為純數字的問題,當然也可以判斷一個字串是否為純字母字串
- JDBC3——SQL隱碼攻擊、及其解決方法——Statement與PreparedStatement對比——PreparedStatement的CRUDJDBCSQL
- 唯一索引,可以在索引列插入多個null嗎索引Null
- thinkphp model層外挪,以便多個站點可以通用PHP
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫