儲存過程五種使用場景比較
Java Database Connectivity (JDBC) API 是 J2EE 的一部分,是 Java 語言訪問關係資料庫的基於標準的首要機制,提供了對資料庫訪問和快取管理的直接控制。
JDBC 中的 CallableStatement 物件為所有的關係資料庫管理系統 (RDBMS: Relational Database Management System) 提供了一種標準形式呼叫儲存過程的方法。對儲存過程的呼叫有兩種形式:帶結果引數和不帶結果引數。結果引數是一種輸出引數,是儲存過程的返回值。兩種形式都可帶有數量可變的輸入(IN 引數)、輸出(OUT 引數)或輸入和輸出(INOUT 引數)的引數。
在 JDBC 中呼叫儲存過程的語法為:{call procedure_name[(?, ?, ...)]};返回結果引數的儲存過程的語法為:{? = call procedure_name[(?, ?, ...)]};不帶引數的儲存過程的語法為:{call procedure_name}。其中,問號代表引數,方括號表示其間的內容是可選項。
使用 CallableStatement 物件呼叫儲存過程的過程如下:
- 使用 Connection.prepareCall 方法建立一個 CallableStatement 物件。
- 使用 CallableStatement.setXXX 方法給輸入引數(IN)賦值。
- 使用 CallableStatement.registerOutParameter 方法來指明哪些引數只做輸出引數(OUT),哪些是輸入輸出引數(INOUT)。
- 呼叫以下方法之一來呼叫儲存過程:
- int CallableStatement.executeUpdate: 儲存過程不返回結果集。
- ResultSet CallableStatement.executeQuery: 儲存過程返回一個結果集。
- Boolean CallableStatement.execute: 儲存過程返回多個結果集。
- int[] CallableStatement.executeBatch: 提交批處理命令到資料庫執行。
- 如果儲存過程返回結果集,則得到其結果集。
- 呼叫 CallableStatement.getXXX 方法從輸出引數 (OUT) 或者輸入輸出引數 (INOUT) 取值。
- 使用完 CallableStatement 物件後,使用 CallableStatement.close 方法關閉 CallableStatement 物件。
Connection con = null; ... // Create a CallableStatement object CallableStatement cstmt = con.prepareCall("CALL exampleJDBC (?, ?, ?, ?, ?)"); cstmt.setString (1, “BeiJing”); // Set input parameter cstmt.setInt (2, 2008); // Set input parameter cstmt.registerOutParameter (3, Types.INTEGER); cstmt.registerOutParameter (4, Types.INTEGER); cstmt.registerOutParameter (5, Types.VARCHAR); cstmt.executeUpdate(); // Call the stored procedure int goldnumber = cstmt.getInt(3); // Get the output parameter values int silvernumber = cstmt.getInt(4); String errorinfo = cstmt.getString(5); cstmt.close(); |
當儲存過程返回一個結果集時,只需遍歷該結果集便可以得到儲存過程執行的所有結果。具體例子見清單2。
清單 2. 儲存過程返回一個結果集
CallableStatement cstmt = null; … boolean moreResultSets = cstmt.execute(); ResultSet rs1 = cstmt.getResultSet(); while (rs1.next()) System.out.println(rs1.getString(1) + " " + rs1.getString(2)); |
當儲存過程返回多個結果集時,遍歷所有結果集才能得到執行的所有結果,使用 getMoreResults() 方法跳轉到下一個結果集。具體例子見清單3。
清單 3. 儲存過程返回多個結果集
CallableStatement cstmt = null; … While (cstmt.getMoreResults()) { ResultSet rs2 = cstmt.getResultSet(); while (rs2.next()) System.out.println(rs2.getString(1) + " " + rs2.getString(2)); rs2.close(); } |
如果儲存過程返回多個結果集,每個結果集的資料結構都不一樣,或者某些結果集的資料結構未知,則可以使用 getColumnName() 方法來得到結果集中資料的列名。具體例子見清單 4。
清單 4. 儲存過程返回多個結果集,並且每個結果集的資料結構未知或者不一樣
CallableStatement cstmt = null; … boolean moreResultSets = cstmt.execute(); while (moreResultSets) { ResultSet rs = cstmt.getResultSet(); ResultSetMetaData rsmd = rs.getMetaData(); StringBuffer buffer = new StringBuffer(); for (int i = 1; i <= rsmd.getColumnCount(); i++){ buffer.append(rsmd.getColumnName(i)).append("/t"); System.out.println(buffer.toString()); while (rs.next()) { buffer.setLength(0); for (int i = 1; i <= rsmd.getColumnCount(); i++) buffer.append(rs.getString(i)).append("/t"); System.out.println(buffer.toString()); } } rs.close(); moreResultSets = cstmt.getMoreResults(); } |
多年來 JDBC 一直是 Java 開發人員進行資料訪問的標準,這是一種穩定且被廣泛證實的技術,目前已經發展成可以提供完全具有快取記憶體和資源池機制的完善的資料庫驅動程式。使用 JDBC 來呼叫儲存過程是最常見的一種方式,由於 JDBC 是最接近於資料庫的 API,因而其效率也是最高的。CallableStatement 物件為所有的 DBMS 提供了標準形式呼叫儲存過程的方法,對於要求實現靈活,執行效率要求比較高應用,直接採用 JDBC API 來實現儲存過程能很好地滿足需要。
JDBC API 是 J2EE 定義的訪問後端資料庫的標準 API,在 JDBC 的基礎上,IBM WebSphere 部門從 WebSphere Application Server 5.0 開始提供了一個擴充套件的資料庫訪問框架 IBM DB Beans。這個框架提供了 JDBC 所不具有的眾多擴充套件功能,包括帶引數的查詢、跨越多個事務的結果集緩衝以及通過緩衝執行更新、元資料對映等等,同時它也隱藏了用 JDBC 訪問後端資料庫時必須涉及的許多複雜細節,被設計成支援任何支援 JDBC 的資料來源,使得 Bean與各種 DBMS 無關。
WebSphere 的資料庫訪問擴充套件框架的 API 可以在 IBM 基於 Eclipse 的各種整合開發工具的 plugins 目錄下找到,通常為 plugins 目錄下外掛 com.ibm.datatools.dbjars 所在目錄下的 dbbeans.jar 檔案中,開發時只要把這個 jar 檔案放入專案的編譯路徑就可以使用。
在 IBM 擴充套件的資料庫訪問框架中,DBProcedureCall 物件用於呼叫後端資料庫的儲存過程,並管理儲存過程的執行結果。呼叫 DBStatement.setConnectionSpec() 可以設定 SQL 命令的連線屬性,由於這一機制,同一個連線屬性設定可用於一個以上的 SQL 命令。
DBProcedureCall 繼承自 DBStatement,通過 DBProcedureCall 呼叫儲存過程時,獲取元資料使用 DBStatement 的 getParameterMetaData() 方法。引數可以是自定義的 Java 類,也可以是 Java 的標準資料型別;如果要將 Java 資料型別對映到資料庫欄位型別,這一機制是非常有用的。下面是一個例子:
DBProcedureCall procCall = null; DBParameterMetaData parmMetaData = null; try { // Create DatabaseConnection object and set its properties procCall = new DBProcedureCall(); // Connect to database via DataSource object procCall.setDataSourceName("jdbc/sample"); // Set user name and password procCall.setUsername(userid); procCall.setPassword(password); // Make it auto commit procCall.setAutoCommit(false); // Set SQL statement procCall.setCommand("{ CALL DB2ADMIN.INSERTORDER (:ORDERID,:DATE) }"); // Get DBParameterMetaData object and set its properties parmMetaData = procCall.getParameterMetaData(); parmMetaData.setParameter(1, "ORDERID", java.sql.DatabaseMetaData.procedureColumnIn, java.sql.Types.CHAR, String.class); parmMetaData.setParameter(2, "DATE", java.sql.DatabaseMetaData.procedureColumnIn, java.sql.Types.CHAR, String.class); // Set input parameter for stored procedure procCall.setParameter("ORDERID", order); procCall.setParameter("DATE", date); // Execute stored procedure procCall.execute(); // Return DBProcedureCall object return procCall; } catch (Exception ex) { ex.printStackTrace(); } finally { // Release resource used by DBProcedureCall try { if (procCall != null) procCall.close(); } catch (java.sql.SQLException ex) { } } |
IBM 整合開發環境 RDA(Rational Data Architect) 提供了對 DB Beans 的支援,能夠圖形化地生成 DB Beans 的絕大部分程式碼。RDA 是 IBM 提供的企業資料建模和整合設計工具,旨在幫助資料架構師理解資料資產及其關係,設計聯邦資料庫,以及流線化資料庫專案,能夠幫助資料架構師發現、建模、視覺化、關聯和開發異構資料資產。更多關於 RDA 的使用參見參考文獻。
IBM 資料庫訪問框架提供了豐富的擴充套件功能,例如帶引數的查詢、結果集緩衝以及通過緩衝執行更新、元資料對映,等等,同時它也隱藏了用 JDBC 訪問後端資料庫時必須涉及的許多複雜細節,這種方式使開發人員不用針對各種 JDBC 應用單獨實現這些功能。
J2EE Connector Architecture (JCA) 1.5標準定義了資源介面卡 (Resource Adapter) 元件規範,使J2EE應用程式可以通過標準介面和各種企業資訊系統(EIS: Enterprise Information System)互動,如ERP 系統、SCM 系統以及各種資料庫系統等等,以便獲取所需的資料和服務。
基於 JCA 標準,IBM 提供了 WebShpere Adapter 實現 J2EE 元件和 EIS 之間資料的互動。WebShpere Adapter 可以部署在 WebSphere 業務流程伺服器 WPS (WebSphere Process Server) 或者 WebSphere 企業服務匯流排 ESB (WebSphere Enterprise Service Bus) 上,以連線伺服器上的 J2EE 應用程式和 EIS,如圖 1。
圖 1. 部署在 WPS 上的 IBM WebSphere Adapter
WebShpere Adapter 可以分為兩類:Application Adapters 和 Technology Adapters。Application Adapters 是針對各種特定 EIS 的介面卡,如 SAP, Siebel, Peoplesoft 和 Oracle eBusiness Suite 等;Technology Adapters 是針對實現某種技術的 EIS 系統,如 WebSphere Adapter for JDBC、Mail 介面卡、Text 介面卡和 XML 介面卡。
WebSphere Adapter for JDBC 是一種提供 J2EE 應用和支援 JDBC 2.0 的資料庫系統之間的連線的 WebShpere Adapter,屬於 Technology Adapters。WebSphere Adapter for JDBC 使用業務物件 (BO: Business Object) 的形式來傳遞資料,提供了 Inbound 和 Outbound 兩種方式。其工作機制見圖 2。
WebSphere Adapter for JDBC 的工作機制:
圖 2. WebSphere Adapter for JDBC 的工作機制
對於 Outbound 操作,J2EE 應用程式產生 BO,並將其傳遞給 WebSphere Adapter for JDBC,Adapter 根據 BO 中指定的操作,比如增加、刪除、修改,查詢,建立記錄等操作,訪問其連線的資料庫並進行響應的操作。
對於 Inbound 操作,資料庫中的資料通過某個 EIS 得到了更新,這個更新通過觸發器或者其他方式被捕獲,將這個事件和相應的事件資訊插入到一個 "EventStore" 表中。Adapter 會監測 Event Table 中的資料,將每個事件構建成一個 Business Graph 併發送到訂閱相應的資料表改變事件的 J2EE 應用程式中。
使用 IBM Websphere 整合開發環境 WID (Websphere Integration Developer) 能夠開發各種 WebShpere Adapter 的元件。WID 實現了企業元資料發現(EMD: Enterprise Metadata Discovery)規範,使用企業服務發現器(ESD: Enterprise Service Discovery)來連線各種 EIS,以發現其上存在的資料和服務,並自動產生相應的訪問介面。有關企業元資料發現規範和企業服務發現器的詳細介紹,請看後面的參考資料。
WebSphere Adapter for JDBC 的 Outbound 操作能夠自動發現數據庫中的儲存過程,並生成相應的業務物件和介面。這樣 J2EE 應用程式只需要使用生成的業務物件和介面就可以呼叫資料庫中的儲存過程。使用 WID 建立針對儲存過程的 Outbound 元件原理和步驟如下:
- 在WID中建立商業模組(Business Module):切換到Business Integration檢視下,建立一個商業模組,之後建立的EIS的Outbound元件將成為這個商業模組的一部分。
- 匯入 JDBC 資源介面卡:將 JDBC Adapter 的 CWYBC_JDBC.RAR 檔案匯入到 WID 中,這個檔案既包括了實現了 JCA 標準的 JDBC 介面卡,也包括了企業服務發現器的檔案。通常可以在下面的路徑中找到這個檔案:<WIDInstallDIR>/Resource Adapters/JDBC/deploy。
- 建立企業服務發現嚮導,並使用其建立業務物件和介面與設定連線屬性:主要包括如下內容:
- 設定連線資料庫屬性,包括使用者名稱,密碼,資料庫 URL 和 JDBC 驅動等。
- 企業服務發現器使用上述連線屬性,連線到現有資料庫中,自動發現數據庫中的資料庫表,檢視,儲存過程等資料庫物件。
- 從發現的結果中選擇某個資料庫物件,設定介面卡的連線方式為Outbound,企業服務發現器將建立業務物件和相應的介面。在這裡,我們選擇儲存過程這種資料庫物件。
- 設定WebSphere Adapter for JDBC執行時需要的連線屬性,可以通過設定JNDI名和設定啟用認證別名兩種方式。使用啟用別名認證方式時,大部分屬性必須在建立JDBCAdapter 專案時指定,使用JNDI名認證時,這些屬性需要在配製執行環境時在WPS管理控制檯設定。
需要說明的是,對於需要 7*24 小時的應用或者對於含有多個介面卡的應用,推薦使用 JNDI 方式設定WebSphere Adapter for JDBC 執行時需要的連線屬性。這樣的話,當資料庫發生變化,例如資料庫遷移,使用者名稱密碼變更等,只需要動態修改 WPS 中 JNDI 的配置資訊即可,無需重新部署和啟動介面卡所在的商業模組也無需修改每個介面卡。
IBM WebSphere Adapter for JDBC 將儲存過程自動生成一系列的業務物件和介面供開發人員使用,資料庫充當服務提供程式或者使用者,開發人員只需要處理 Inbound 和 Outbound 即可。這種方式適用於資料庫結構已經固定,不會再有顯著變化的情況,比如對現有系統或者遺留的整合或者再次開發。假如在一個新專案中大量採用WebSphere Adapter for JDBC 這種方式,很可能反而降低開發效率,尤其不推薦將這種方式用於極限程式設計。當用戶的需求或者資料庫表結構經常不斷變化時,使用 IBM WebSphere Adapter 進行開發的成本將大大提高,因為資料庫表的每一次變化都會導致需要重新生成 WebSphere Adapter for JDBC 的 Inbound 或者 Outbound 元件,業務物件和介面的變化進而導致呼叫這些元件的模組也需要重新進行修改。
隨著 Web Service 的廣泛使用,Web Service 已經成為了異構系統服務相互呼叫的事實標準。各種語言各種環境下的服務都可以封裝成 Web Service,暴露給別人使用,儲存過程也不例外。
在這方面,IBM 和微軟一直是先行者。IBM 開發了 Web 服務物件執行時框架 WORF(Web service Object Runtime Frameworks),WORF 支援使用 DB2 作為 Web 服務提供程式,可以很容易地將資料庫資料和儲存過程暴露為 Web 服務。微軟提供了 SQLXML 3.0(SQL Server 2000 Web Release 3)來實現該功能。SQLXML 3.0 使你能夠從資料庫中選擇儲存過程並從虛擬目錄中選擇 XML 模版,把它們暴露為 Web 服務的方法。
在介紹 WORF 之前,先介紹幾個概念:DAD, DXX, DADX。
DAD(Document Access Definition)即文件訪問定義,是一種定義 XML 與關係資料之間的對映的 XML 文件格式,通過DAD檔案可以將XML檔案中的資料對映到資料庫中來,見圖4。DAD使用DTD來定義其檔案結構,更多關於DAD的內容可以閱讀參考資料中DB2 XML Extender相關的連結。
圖 4. 通過 DAD 檔案實現 XML 檔案和 DB2 資料的對映
DXX(DB2 XML Extender)為 DB2 提供了一組新的資料型別、函式和儲存過程,用於儲存和訪問 XML 文件,從關係資料生成 XML 文件或者將 XML 文件分解成關係資料。DB2 XML Extender 使用 DAD 來定義 XML 和關係資料之間的對映。
DADX(Document Access Definition Extension)即文件訪問定義擴充套件,是一種指定如何通過使用由 DAD 文件和 SQL 語句定義的操作來建立 Web 服務的 XML 文件格式,目前其規範版本為 DADX1.0。
下面是一個簡單的 DADX 檔案,這個 DADX 檔案定義了一個名字為 findCustomer 的操作,其操作是查詢Customer 表中的所有記錄。
清單 6. DADX 檔案示例
<?xml version="1.0" encoding="UTF-8"?> <DADX xmlns="http://schemas.ibm.com/db2/dxx/dadx" > <documentation> A simple DADX example that accesses the Company database. </documentation> <operation name="findCustomer"> <documentation> Lists all the customers. </documentation> <query> <SQL_query>SELECT * FROM Customer</SQL_query> </query> </operation> </DADX> |
WORF 提供了一個構建 XML Web 服務和訪問 DB2 的環境,這個環境包含在 IBM WID 中,也可以單獨下載。WORF 使用 DADX 檔案描述可以通過 Internet 呼叫的 SQL 操作;支援通過 HTTP GET、POST 和 SOAP 繫結訪問服務,當收到一個服務請求時,WORF 將裝載請求中指定的 DADX 檔案,連線到 DB2,執行 SQL 語句,並提交資料庫事務。它將把結果格式化成 XML,必要時轉換資料型別,然後把響應返回給請求者。
DAD 和 DADX 都是 IBM 定義的 XML 文件格式,目前主要用於 IBM DB2 產品中,這一點從 DADX 的名稱空間 "http://schemas.ibm.com/db2/dxx/dadx" 看出。只有安裝上 DB2 XML Extender 之後,DB2 才能支援 XML 和 DB2 關係資料之間的對映。DAD, DADX, DB2 XML Extender 以及 WORF 四者之間的關係如下:
圖 5. DAD, DADX, DB2 XML Extender, WORF 四者之間的關係
從 SQL 語句或儲存過程建立 Web Service 過程主要分為兩步:第一步是使用 WID 從 SQL 語句或儲存過程建立一個 DADX 檔案;第二步是從 DADX 檔案建立 Web 服務,包括生成 WSDL 服務描述。這裡只是對其原理作進行介紹,更詳細步驟可見參考文獻。
在分散式應用,多個系統的業務整合等情況下,使用 DADX 將儲存過程封裝成 Web Service 暴露給其他系統使用是一種不錯的方法。通過 IBM 提供的 WORF, DADX, WID 等工具和規範,不需要對 SOAP,WSDL,JDBC 等有太多的瞭解,也不需要編寫複雜和費時的程式碼,即可快速地將 DB2 以資料提供者或資料消費者的方式,整合到企業應用程式和應用環境中,這在相當程度上簡化了開發過程,能幫助企業面對需求迅速做出響應,實現自己 SOA 解決方案。由於 XML 對於 Web 服務的執行是必不可少的一部分,因此 XML 處理的開銷會引起效能方面的代價,對於單機應用程式以及要求快速響應的系統,將儲存過程暴露成 Web Service 將會抵消掉儲存過程高效的優點,並不是一種較好的方案。
EJB(Enterprise Java Bean)是 Sun 推出的 java 平臺上的伺服器端元件。EJB 技術能夠加速和簡化基於 java 技術的分散式、事務性的、安全的和可移植性的應用開發,主要用於企業級應用中。EJB 包括實體 Bean,會話 Bean 和訊息驅動 Bean。
其中,實體 Bean 主要用來實現資料的持久化。會話 EJB 在 J2EE 應用程式中被用來完成一些伺服器端的業務操作,例如訪問資料庫、呼叫其他 EJB 元件。實體 Bean 因其設計複雜,消耗大量的資源等缺點而聲名狼藉。因而,在實際應用中,應該儘可能少地使用實體 Bean,其中,一種解決方案就是使用會話 Bean 和 JDBC 或者 IBM DB Beans 的組合方式,使用 JDBC 或者 IBM DB Beans 來呼叫儲存過程。參考文獻中的《將 DBMS 儲存過程封裝為會話 EJB 元件中的方法》詳細介紹瞭如何將使用會話 Bean 和 IBM DB Beans 結合的方式來封裝 DBMS 儲存過程。
在使用會話 Bean 和 JDBC 或者 IBM DB Beans 的組合方式時,會話 Bean 將對資料庫的所有訪問委託給 JDBC 或者 IBM DB Beans 來實現。這種方式相對於實體 Bean 來說,能使開發人員對資料管理有細粒度的控制權,利用成熟和靈活的 JDBC 或者 IBM DB Beans 資料庫管理訪問技術,容易進行功能優化,並將這些功能全部封裝成一個相對簡單的元件體系結構中。
其缺點在於,與 JDBC 或者 IBM DB Beans 結合的會話 Bean 有三個關鍵問題:Bean 的實現通常比較複雜;會話 Bean 需要開發人員實現自己的事務支援;永續性也需要開發人員自己控制,無法由容器提供和保障。
相對於實體 Bean,使用會話 Bean 和 JDBC 或者 IBM DB Beans 的組合方式來封裝 DBMS 儲存過程具有靈活性高,資源消耗小等優點。這種方式對於不需要事務支援的業務流程或者只是對資料庫進行查詢操作的儲存過程,是一種比較好的選擇。
上述操作完成之後便可以在商業模組的裝配圖(Assembly Diagram)中看到一個 EIS 的 Outbound 元件。圖 3 是一個建立成功的 EIS 的 Outbound 元件的效果圖。儲存過程的輸入和輸出引數自動對映為業務物件,儲存過程的方法自動對映為元件的介面。使用者使用時,只需要將輸入引數封裝成相應業務物件,呼叫該元件提供的介面即可。
清單1是一個使用 executeUpdate 來執行的儲存過程的例子。儲存過程名為 exampleJDBC,含有五個引數,前兩個分別是 String 和 Int 型別的輸入引數,後三個分別是整型,整型和字元型的輸出引數。分別給輸入引數賦值 ”Beijing” 和 2008,執行 executeUpdate 命令後,從後三個輸出引數中可以得到輸出值,沒有結果集返回。需要說明的是,這裡的引數下標是以 1 開始的,與 java 陣列下標以 0 開始不同。
相關推薦
儲存過程五種使用場景比較
Java Database Connectivity (JDBC) API 是 J2EE 的一部分,是 Java 語言訪問關係資料庫的基於標準的首要機制,提供了對資料庫訪問和快取管理的直接控制。 JDBC 中的 CallableStatement 物件為所有的關係資料庫管
分頁-儲存過程5種寫法 sqlserver分頁
在SQL Server資料庫操作中,我們常常會用到儲存過程對實現對查詢的資料的分頁處理,以方便瀏覽者的瀏覽。本文我們總結了五種SQL Server分頁儲存過程的方法,並對其效能進行了比較,接下來就讓我們來一起了解一下這一過程。 建立資料庫data_Test : create
分析儲存過程的使用場景及其優缺點
分析儲存過程的使用場景 當 一個事務涉及到多個SQL語句時或者涉及到對多個表的操作時就要考慮用儲存過程;當在一個事務的完成需要很複雜的商業邏輯時(比如,對多個數據的操作,對 多個狀態的判斷更改等)要考慮;還有就是比較複雜的統計和彙總也要考慮,但是過多的使用儲存過程會降
Redis的五種儲存型別和其應用場景
常用資料型別簡介: redis常用五種資料型別:string,hash,list,set,zset(sorted set). 1.String型別 String是最簡單的型別,一個key對應一個value String型別的資料最大1G。 String
建立五種儲存過程及遊標的使用
--建立儲存過程 --A. 建立使用引數的儲存過程 CREATE PROC au_info @lastname varchar(40), @firstname varchar(20) AS SELECT au_lname, au_fname, title, pub_
Docker五種存儲驅動原理及應用場景和性能測試對比
Docker 存儲驅動 Docker最開始采用AUFS作為文件系統,也得益於AUFS分層的概念,實現了多個Container可以共享同一個image。但由於AUFS未並入Linux內核,且只支持Ubuntu,考慮到兼容性問題,在Docker 0.7版本中引入了存儲驅動, 目前,Docker支持AUFS
python3開發進階-Django框架的中間件的五種用法和邏輯過程
meta alc 多個 img eth ble 方法 get action 閱讀目錄 什麽是中間件 中間件的執行流程 中間件的邏輯過程 一、什麽是中間件? 官方的說法:中間件是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、
五種智能算法解決最大割問題分析與比較_愛學術
測試結果 最大 計算 遺傳算法 網絡 -c field author 粒子 【摘要】最大割問題(Max-cut Problem)是一個典型的NP難組合優化問題。文章采用遺傳算法、分布估計算法、Hopfield網絡方法、蟻群算法、粒子群算法等5種算法對最大割問題進行求解,並用
五種回歸方法的比較
int port 數據集 pair 條目 如果 imp smo 假設 引言 線性和邏輯回歸通常是人們為機器學習和數據科學學習的第一個建模算法。 兩者都很棒,因為它們易於使用和解釋。 然而,它們固有的簡單性也有一些缺點,在許多情況下它們並不是回歸模型的最佳選擇。 實際
Android資料儲存五種方式
https://www.cnblogs.com/ITtangtang/p/3920916.html SharedPreferences的基本使用-----存,刪,改,查:https://www.cnblogs.com/qianzf/p/7582400.html Android Sha
Java 字串拼接 五種方法的效能比較分析 “+”、contact、join、append
一、五種方法分析: 1. 加號 “+” 2. String contact() 方法 3. StringUtils.join() 方法 4. StringBuffer append() 方法 5. StringBuilder append() 方法 二、優劣勢分析 開
儲存過程值的比較
在oracle中進行 != , is not null , not in 的比較時,比較的值不能為空值。 declare v varchar2(50) := '' ; begin if v = '123' then v := '1'; end if; end ; 當定義的
Map集合的遍歷方式以及TreeMap集合儲存自定義物件實現比較的Comparable和Comparator兩種方式
Map集合的特點 1、Map集合中儲存的都是鍵值對,鍵和值是一一對應的 2、一個對映不能包含重複的值 3、每個鍵最多隻能對映到一個值上 Map介面和Collection介面的不同 Map是雙列集合的根介面,Collection是單列集合的根介面 1、Map是雙列的(是雙列集合的根介
asp.net core 2.1 dotnet(五)EF.core Dbfirst 生成 檢視與呼叫儲存過程
1 檢視,可以直接在 Model中寫 檢視的模型 執行方式如找到一個,還沒有試過: 有關 .net core EF 的問題有一個地址: https://github.com/aspnet/EntityFra
踩坑經歷(五)一次關於MySQL儲存過程的排錯
SQL語句 -- #開啟定時器,預設為關閉狀態 set global event_scheduler =1; #或者set GLOBAL event_scheduler = ON; use monitorsys; drop event if exists report_back
Android五種資料儲存方式之SQLite資料庫儲存 載入SD卡資料庫 sql操作 事務 防止SQL注入
資料庫 前言 資料庫儲存 資料庫建立 內建儲存資料庫 外接儲存資料庫 編寫DAO 插入操作 更新操作 刪除操作 查詢操作
Android五種資料儲存方式之檔案儲存 內部儲存 外部儲存 檔案讀取儲存操作封裝
檔案儲存 前言 檔案儲存 記憶體 內部儲存 外部儲存 內部儲存操作 API 讀寫操作 外部儲存操作 公共目錄 私有目錄
Java中呼叫sqlServer的儲存過程(CallableStatement)的幾種簡單情況
一、呼叫不帶引數的儲存過程 --建立儲存過程 create procedure testselect as begin select bno from book; end package com.nc.dao; import java.sql.*; public class test
SQL Server 儲存過程返回值的幾種方式
獲得儲存過程的返回值–通過查詢分析器獲得 (1)不帶任何引數的儲存過程(儲存過程語句中含有return) —建立儲存過程 CREATE PROCEDURE testReturn AS return 145 GO —執行儲存過程 DECLARE @RC int exec @RC=