當前位置:首頁 » 存儲配置 » java調用存儲過程mysql

java調用存儲過程mysql

發布時間: 2024-06-10 10:29:25

⑴ 如何用java調用存儲過程

已儲存過程儲存在資料庫中。對已儲存過程的調用是 CallableStatement對象所含的內容。這種調用是用一種換碼語法來寫的,有兩種形式:一種形式帶結果參,另一種形式不帶結果參數。結果參數是一種輸出 (OUT) 參數,是已儲存過程的返回值。兩種形式都可帶有數量可變的輸入(IN 參數)、輸出(OUT 參數)或輸入和輸出(INOUT 參數)的參數。問號將用作參數的佔位符。 在JDBC 中調用已儲存過程的語法如下所示。注意,方括弧表示其間的內容是可選項;方括弧本身並不是語法的組成部份。{call 過程名[(?, ?, ...)]} 返回結果參數的過程的語法為:{? = call 過程名[(?, ?, ...)]} 不帶參數的已儲存過程的語法類似:{call 過程名} 通常,創建 CallableStatement 對象的人應當知道所用的 DBMS 是支持已儲存過程的,並且知道這些過程都是些什麼。然而,如果需要檢查,多種DatabaseMetaData 方法都可以提供這樣的信息。例如,如果 DBMS 支持已儲存過程的調用,則supportsStoredProceres 方法將返回 true,而getProceres 方法將返回對已儲存過程的描述。CallableStatement 繼承 Statement 的方法(它們用於處理一般的 sql 語句),還繼承了 PreparedStatement 的方法(它們用於處理 IN 參)。 CallableStatement 中定義的所有方法都用於處理 OUT 參數或 INOUT 參數的輸出部分:注冊 OUT 參數的 JDBC 類型(一般 SQL 類型)、從這些參數中檢索結果,或者檢查所返回的值是否為 JDBC NULL。 1、創建 CallableStatement 對象 CallableStatement 對象是用 Connection 方法 prepareCall 創建的。下例創建 CallableStatement 的實例,其中含有對已儲存過程 getTestData 調用。該過程有兩個變數,但不含結果參數:CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}"); 其中?佔位符為IN、OUT還是INOUT參數,取決於已儲存過程getTestData。 2、IN和OUT參數 將IN參數傳給 CallableStatement 對象是通過 setXXX 方法完成的。該方法繼承自 PreparedStatement。所傳入參數的類型決定了所用的setXXX方法(例如,用 setFloat 來傳入 float 值等)。 如果已儲存過程返回 OUT 參數,則在執行 CallableStatement 對象以前必須先注冊每個 OUT 參數的 JDBC 類型(這是必需的,因為某些 DBMS 要求 JDBC 類型)。注冊 JDBC 類型是用 registerOutParameter 方法來完成的。語句執行完後,CallableStatement 的 getXXX 方法將取回參數值。正確的 getXXX 方法是為各參數所注冊的 JDBC 類型所對應的 Java 類型。換言之, registerOutParameter 使用的是 JDBC 類型(因此它與資料庫返回的 JDBC 類型匹配),而 getXXX 將之轉換為 Java 類型。 作為示例,下述代碼先注冊 OUT 參數,執行由 cstmt 所調用的已儲存過程,然後檢索在 OUT 參數中返回的值。方法 getByte 從第一個 OUT 參數中取出一個 Java 位元組,而 getBigDecimal 從第二個 OUT 參數中取出一個 BigDecimal 對象(小數點後面帶三位數):CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}");
cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 3);
cstmt.executeQuery();
byte x = cstmt.getByte(1);
java.math.BigDecimal n = cstmt.getBigDecimal(2, 3); CallableStatement 與 ResultSet 不同,它不提供用增量方式檢索大 OUT 值的特殊機制。3、INOUT參數 既支持輸入又接受輸出的參數(INOUT 參數)除了調用 registerOutParameter 方法外,還要求調用適當的 setXXX 方法(該方法是從 PreparedStatement 繼承來的)。setXXX 方法將參數值設置為輸入參數,而 registerOutParameter 方法將它的 JDBC 類型注冊為輸出參數。setXXX 方法提供一個 Java 值,而驅動程序先把這個值轉換為 JDBC 值,然後將它送到資料庫中。這種 IN 值的 JDBC 類型和提供給 registerOutParameter 方法的 JDBC 類型應該相同。然後,要檢索輸出值,就要用對應的 getXXX 方法。例如,Java 類型為byte 的參數應該使用方法 setByte 來賦輸入值。應該給registerOutParameter 提供類型為 TINYINT 的 JDBC 類型,同時應使用 getByte 來檢索輸出值。 下例假設有一個已儲存過程 reviseTotal,其唯一參數是 INOUT 參數。方法setByte 把此參數設為 25,驅動程序將把它作為 JDBC TINYINT 類型送到資料庫中。接著,registerOutParameter 將該參數注冊為 JDBC TINYINT。執行完該已儲存過程後,將返回一個新的 JDBC TINYINT 值。方法 getByte 將把這個新值作為 Java byte 類型檢索。CallableStatement cstmt = con.prepareCall("{call reviseTotal(?)}");
cstmt.setByte(1, 25);
cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.executeUpdate();
byte x = cstmt.getByte(1); 4、先檢索結果,再檢索 OUT 參數 由於某些 DBMS 的限制,為了實現最大的可移植性,建議先檢索由執行CallableStatement 對象所產生的結果,然後再用 CallableStatement.getXXX 方法來檢索 OUT 參數。如果 CallableStatement 對象返回多個 ResultSet 對象(通過調用 execute 方法),在檢索 OUT 參數前應先檢索所有的結果。這種情況下,為確保對所有的結果都進行了訪問,必須對 Statement 方法 getResultSet、getUpdateCount 和getMoreResults 進行調用,直到不再有結果為止。 檢索完所有的結果後,就可用 CallableStatement.getXXX 方法來檢索 OUT 參數中的值。 5、檢索作為OUT參數的NULL值 返回到 OUT 參數中的值可能會是JDBC NULL。當出現這種情形時,將對 JDBC NULL 值進行轉換以使 getXXX 方法所返回的值為 null、0 或 false,這取決於getXXX 方法類型。對於 ResultSet 對象,要知道0或false是否源於JDBCNULL的唯一方法,是用方法wasNull進行檢測。如果 getXXX 方法讀取的最後一個值是 JDBC NULL,則該方法返回 true,否則返回 flase。
復雜的返回值 關於存儲過程的知識,很多人好像就熟悉我們所討論的這些。如果這是存儲過程的全部功能,那麼存儲過程就不是其它遠程執行機制的替換方案了。存儲過程的功能比這強大得多。
某些DBMS允許從存儲過程中返回遊標的一個引用。JDBC並不支持這個功能,但是Oracle、PostgreSQL和DB2的JDBC驅動器都支持在ResultSet上打開到游標的指針(pointer)。
設想列出所有沒有活到退休年齡的詩人,下面是完成這個功能的存儲過程,返回一個打開的游標,同樣也使用PostgreSQL的pl/pgsql語言: create procere list_early_deaths () return refcursor as 'declare toesup refcursor;begin open toesup for SELECT poets.name, deaths.age FROM poets, deaths -- all entries in deaths are for poets. -- but the table might become generic. WHERE poets.id = deaths.mort_id AND deaths.age < 60; return toesup;end;' language 'plpgsql'; 下面是調用該存儲過程的Java方法,將結果輸出到PrintWriter:
PrintWriter: static void sendEarlyDeaths(PrintWriter out){ Connection con = null; CallableStatement toesUp = null; try { con = ConnectionPool.getConnection(); // PostgreSQL needs a transaction to do this... con. setAutoCommit(false); // Setup the call. CallableStatement toesUp = connection.prepareCall("{ ? = call list_early_deaths () }"); toesUp.registerOutParameter(1, Types.OTHER); toesUp.execute(); ResultSet rs = (ResultSet) toesUp.getObject(1); while (rs.next()) { String name = rs.getString(1); int age = rs.getInt(2); out.println(name + " was " + age + " years old."); } rs.close(); } catch (SQLException e) { // We should protect these calls. toesUp.close(); con.close(); }} 因為JDBC並不直接支持從存儲過程中返回遊標,我們使用Types.OTHER來指示存儲過程的返回類型,然後調用getObject()方法並對返回值進行強制類型轉換。
這個調用存儲過程的Java方法是mapping的一個好例子。Mapping是對一個集上的操作進行抽象的方法。不是在這個過程上返回一個集,我們可以把操作傳送進去執行。本例中,操作就是把ResultSet列印到一個輸出流。這是一個值得舉例的很常用的例子,下面是調用同一個存儲過程的另外一個方法實現: public class ProcessPoetDeaths{ public abstract void sendDeath(String name, int age);} static void mapEarlyDeaths(ProcessPoetDeaths mapper){ Connection con = null; CallableStatement toesUp = null; try { con = ConnectionPool.getConnection(); con.setAutoCommit(false); CallableStatement toesUp = connection.prepareCall("{ ? = call list_early_deaths () }"); toesUp.registerOutParameter(1, Types.OTHER); toesUp.execute(); ResultSet rs = (ResultSet) toesUp.getObject(1); while (rs.next()) { String name = rs.getString(1); int age = rs.getInt(2); mapper.sendDeath(name, age); } rs.close(); } catch (SQLException e) { // We should protect these calls. toesUp.close(); con.close(); }} 這允許在ResultSet數據上執行任意的處理,而不需要改變或者復制獲取ResultSet的方法: static void sendEarlyDeaths(final PrintWriter out){ ProcessPoetDeaths myMapper = new ProcessPoetDeaths() { public void sendDeath(String name, int age) { out.println(name + " was " + age + " years old."); } }; mapEarlyDeaths(myMapper);} 這個方法使用ProcessPoetDeaths的一個匿名實例調用mapEarlyDeaths。該實例擁有sendDeath方法的一個實現,和我們上面的例子一樣的方式把結果寫入到輸出流。當然,這個技巧並不是存儲過程特有的,但是和存儲過程中返回的ResultSet結合使用,是一個非常強大的工具。 結論存儲過程可以幫助你在代碼中分離邏輯,這基本上總是有益的。這個分離的好處有:
快速創建應用,使用和應用一起改變和改善的資料庫模式。
資料庫模式可以在以後改變而不影響Java對象,當我們完成應用後,可以重新設計更好的模式。
存儲過程通過更好的SQL嵌入使得復雜的SQL更容易理解。
編寫存儲過程比在Java中編寫嵌入的SQL擁有更好的工具--大部分編輯器都提供語法高亮!
存儲過程可以在任何SQL命令行中測試,這使得調試更加容易。 並不是所有的資料庫都支持存儲過程,但是存在許多很棒的實現,包括免費/開源的和非免費的,所以移植並不是一個問題。Oracle、PostgreSQL和DB2都有類似的存儲過程語言,並且有在線的社區很好地支持。
存儲過程工具很多,有像TOAD或TORA這樣的編輯器、調試器和IDE,提供了編寫、維護PL/SQL或pl/pgsql的強大的環境。
存儲過程確實增加了你的代碼的開銷,但是它們和大多數的應用伺服器相比,開銷小得多。

⑵ JAVA調用MySQL存儲過程

java代碼:

Class.forName("com.mysql.jdbc.Driver");

Connectioncon=DriverManager

.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=111111");

Stringsql="{callsel(?)}";

CallableStatementcs=(CallableStatement)con.prepareCall(sql);

cs.execute();

Stringname=cs.getString(1);

System.out.println(name);

創建存儲過程代碼:

dropprocereifexistssel;

createproceresel(outname1varchar(225))

begin

;

end

輸出結果:

⑶ java如何訪問資料庫(java訪問mysql資料庫)

Java可以使用JDBC訪問資料庫,也可以使用各類ORM框架訪問資料庫,但這些框架最終還是通過JDBC訪問資料庫,它們只是封裝了資料庫操作,而使得開發者可以減少這部分消耗。因此,本文只講解JDBC訪問方式。

JDBC訪問一般分為如下流程:

1、載入JDBC驅動程序:

在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(StringclassName)實現。

例如:

try{

//載入MySql的驅動類

Class.forName("com.mysql.jdbc.Driver");

}catch(e){

System.out.println("找不到驅動程序類,載入驅動失敗!");

e.();

}

成功載入後,會將Driver類的實例注冊到類中。

2、提供JDBC連接的URL

連接URL定義了連接資料庫時的協議、子協議、數據源標識。

書寫形式:協議:子協議:數據源標識

協議:在JDBC中總是以jdbc開始

子協議:是橋連接的驅動程序或是資料庫管理系統名稱。

數據源標識:標記找到資料庫來源的地址與連接埠。

例如:(MySql的連接URL)

jdbc:mysql://localhost:3306/test?useUnicode=true&=gbk;

useUnicode=true:表示使用Unicode字元集。如果設置為

gb2312或GBK,本參數必須設置為true。=gbk:字元編碼方式。

3、創建資料庫的連接

要連接資料庫,需要向java.sql.請求並獲得Connection對象,該對象就代表一個資料庫的連接。

使用的(Stringurl,Stringusername,Stringpassword)方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和密碼來獲得。

例如:

//連接MySql資料庫,用戶名和密碼都是root

Stringurl="jdbc:mysql://localhost:3306/test";

Stringusername="root";

Stringpassword="root";

try{

Connectioncon=

.(url,username,password);

}catch(se){

System.out.println("資料庫連接失敗!");

se.();

}

4、創建一個Statement

要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型:

1、執行靜態SQL語句。通常通過Statement實例實現。

2、執行動態SQL語句。通常通過實例實現。

3、執行資料庫存儲過程。通常通過實例實現。

具體的實現方式:

Statementstmt=con.();

PreparedStatementpstmt=con.prepareStatement(sql);

CallableStatementcstmt=con.prepareCall("{CALLdemoSp(?,?)}");

5、執行慧轎SQL語句

Statement介面提供了三種執行SQL語句的方法:executeQuery、executeUpdate和execute

1、ResultSetexecuteQuery(StringsqlString):執行查詢資料庫的SQL語句,返回一個結果集(ResultSet)對象。

2、intexecuteUpdate(StringsqlString):用於執行INSERT、UPDATE或DELETE語句以及SQLDDL語句,如:CREATETABLE和DROPTABLE等

3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。

具芹尺體實現的代碼:

ResultSetrs=stmt.executeQuery("SELECT*FROM...");

introws=stmt.executeUpdate("INSERTINTO...");

booleanflag=stmt.execute(Stringsql);

6、處理結果

兩種情況:

1、執行更新返回的是本次操作影響到的記錄數。

2、執行查詢返回的結果是一個ResultSet對象。

ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提嫌碧高供了對這些行中數據的訪問。

使用結果集(ResultSet)對象的訪問方法獲取數據:

while(rs.next()){

Stringname=rs.getString("name");

Stringpass=rs.getString(1);//此方法比較高效(列是從左到右編號的,並且從列1開始)

}

7、關閉JDBC對象

操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:

1、關閉記錄集

2、關閉聲明

3、關閉連接對象

if(rs!=null){//關閉記錄集

try{

rs.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

if(stmt!=null){//關閉聲明

try{

stmt.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

if(conn!=null){//關閉連接對象

try{

conn.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

⑷ Java如何實現對存儲過程的調用

import java.sql.*;
public class ProcereTest
{
public static void main(String args[]) throws Exception
{
//載入驅動
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//獲得連接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");

//創建存儲過程的對象
CallableStatement c=conn.prepareCall("{call getsum(?,?)}");

//給存儲過程的第一個參數設置值
c.setInt(1,100);

//注冊存儲過程的第二個參數
c.registerOutParameter(2,java.sql.Types.INTEGER);

//執行存儲過程
c.execute();

//得到存儲過程的輸出參數值
System.out.println (c.getInt(2));
conn.close();

}
}

⑸ java如何獲得mysql存儲過程的返回值

7 - CallableStatement
本概述是從《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》這本書中摘引來的。JavaSoft 目前正在准備這本書。這本書是一本教程,同時也是 JDBC 的重要參考手冊,它將作為 Java 系列的組成部份在 1997 年春季由 Addison-Wesley 出版公司出版。

7.1 概述
CallableStatement 對象為所有的 DBMS 提供了一種以標准形式調用已儲存過程的方法。已儲存過程儲存在資料庫中。對已儲存過程的調用是 CallableStatement 對象所含的內容。這種調用是用一種換碼語法來寫的,有兩種形式:一種形式帶結果參數,另一種形式不帶結果參數(有關換碼語法的信息,參見第 4 節「語句」)。結果參數是一種輸出 (OUT) 參數,是已儲存過程的返回值。兩種形式都可帶有數量可變的輸入(IN 參數)、輸出(OUT 參數)或輸入和輸出(INOUT 參數)的參數。問號將用作參數的佔位符。

在 JDBC 中調用已儲存過程的語法如下所示。注意,方括弧表示其間的內容是可選項;方括弧本身並不是語法的組成部份。

{call 過程名[(?, ?, ...)]}

返回結果參數的過程的語法為:

{? = call 過程名[(?, ?, ...)]}

不帶參數的已儲存過程的語法類似:

{call 過程名}

通常,創建 CallableStatement 對象的人應當知道所用的 DBMS 是支持已儲存過程的,並且知道這些過程都是些什麼。然而,如果需要檢查,多種 DatabaseMetaData 方法都可以提供這樣的信息。例如,如果 DBMS 支持已儲存過程的調用,則 supportsStoredProceres 方法將返回 true,而 getProceres 方法將返回對已儲存過程的描述。

CallableStatement 繼承 Statement 的方法(它們用於處理一般的 SQL 語句),還繼承了 PreparedStatement 的方法(它們用於處理 IN 參數)。CallableStatement 中定義的所有方法都用於處理 OUT 參數或 INOUT 參數的輸出部分:注冊 OUT 參數的 JDBC 類型(一般 SQL 類型)、從這些參數中檢索結果,或者檢查所返回的值是否為 JDBC NULL。

7.1.1 創建 CallableStatement 對象
CallableStatement 對象是用 Connection 方法 prepareCall 創建的。下例創建 CallableStatement 的實例,其中含有對已儲存過程 getTestData 調用。該過程有兩個變數,但不含結果參數:

CallableStatement cstmt = con.prepareCall(
"{call getTestData(?, ?)}");

其中 ? 佔位符為 IN、 OUT 還是 INOUT 參數,取決於已儲存過程 getTestData。

7.1.2 IN 和 OUT 參數
將 IN 參數傳給 CallableStatement 對象是通過 setXXX 方法完成的。該方法繼承自 PreparedStatement。所傳入參數的類型決定了所用的 setXXX 方法(例如,用 setFloat 來傳入 float 值等)。

如果已儲存過程返回 OUT 參數,則在執行 CallableStatement 對象以前必須先注冊每個 OUT 參數的 JDBC 類型(這是必需的,因為某些 DBMS 要求 JDBC 類型)。注冊 JDBC 類型是用 registerOutParameter 方法來完成的。語句執行完後,CallableStatement 的 getXXX 方法將取回參數值。正確的 getXXX 方法是為各參數所注冊的 JDBC 類型所對應的 Java 類型(從 JDBC 類型到 Java 類型的標准映射見 8.6.1 節中的表)。換言之, registerOutParameter 使用的是 JDBC 類型(因此它與資料庫返回的 JDBC 類型匹配),而 getXXX 將之轉換為 Java 類型。

作為示例,下述代碼先注冊 OUT 參數,執行由 cstmt 所調用的已儲存過程,然後檢索在 OUT 參數中返回的值。方法 getByte 從第一個 OUT 參數中取出一個 Java 位元組,而 getBigDecimal 從第二個 OUT 參數中取出一個 BigDecimal 對象(小數點後面帶三位數):

CallableStatement cstmt = con.prepareCall(
"{call getTestData(?, ?)}");
cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 3);
cstmt.executeQuery();
byte x = cstmt.getByte(1);
java.math.BigDecimal n = cstmt.getBigDecimal(2, 3);

CallableStatement 與 ResultSet 不同,它不提供用增量方式檢索大 OUT 值的特殊機制。

7.1.3 INOUT 參數
既支持輸入又接受輸出的參數(INOUT 參數)除了調用 registerOutParameter 方法外,還要求調用適當的 setXXX 方法(該方法是從 PreparedStatement 繼承來的)。setXXX 方法將參數值設置為輸入參數,而 registerOutParameter 方法將它的 JDBC 類型注冊為輸出參數。setXXX 方法提供一個 Java 值,而驅動程序先把這個值轉換為 JDBC 值,然後將它送到資料庫中。

這種 IN 值的 JDBC 類型和提供給 registerOutParameter 方法的 JDBC 類型應該相同。然後,要檢索輸出值,就要用對應的 getXXX 方法。例如,Java 類型為 byte 的參數應該使用方法 setByte 來賦輸入值。應該給 registerOutParameter 提供類型為 TINYINT 的 JDBC 類型,同時應使用 getByte 來檢索輸出值 (第 8 節「JDBC 和 Java 類型之間的映射」將給出詳細信息和類型映射表)。

下例假設有一個已儲存過程 reviseTotal,其唯一參數是 INOUT 參數。方法 setByte 把此參數設為 25,驅動程序將把它作為 JDBC TINYINT 類型送到資料庫中。接著,registerOutParameter 將該參數注冊為 JDBC TINYINT。執行完該已儲存過程後,將返回一個新的 JDBC TINYINT 值。方法 getByte 將把這個新值作為 Java byte 類型檢索。

CallableStatement cstmt = con.prepareCall(
"{call reviseTotal(?)}");
cstmt.setByte(1, 25);
cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.executeUpdate();
byte x = cstmt.getByte(1);

7.1.4 先檢索結果,再檢索 OUT 參數
由於某些 DBMS 的限制,為了實現最大的可移植性,建議先檢索由執行 CallableStatement 對象所產生的結果,然後再用 CallableStatement.getXXX 方法來檢索 OUT 參數。

如果 CallableStatement 對象返回多個 ResultSet 對象(通過調用 execute 方法),在檢索 OUT 參數前應先檢索所有的結果。這種情況下,為確保對所有的結果都進行了訪問,必須對 Statement 方法 getResultSet、getUpdateCount 和 getMoreResults 進行調用,直到不再有結果為止。

檢索完所有的結果後,就可用 CallableStatement.getXXX 方法來檢索 OUT 參數中的值。

7.1.5 檢索作為 OUT 參數的 NULL 值
返回到 OUT 參數中的值可能會是 JDBC NULL。當出現這種情形時,將對 JDBC NULL 值進行轉換以使 getXXX 方法所返回的值為 null、0 或 false,這取決於 getXXX 方法類型。對於 ResultSet 對象,要知道 0 或 false 是否源於 JDBC NULL 的唯一方法,是用方法 wasNull 進行檢測。如果 getXXX 方法讀取的最後一個值是 JDBC NULL,則該方法返回 true,否則返回 flase。

⑹ java語言調用mysql存儲過程(需要獲取到存儲過程中的out 變數),

用getObject方法
getObjectObject getObject(int parameterIndex)
throws SQLException以 Java 編程語言中 Object 的形式獲取指定參數的值。如果值為 SQL NULL,則驅動程序返回一個 Java null。

此方法返回一個 Java 對象,其類型對應於使用 registerOutParameter 方法為此參數注冊的 JDBC 類型。通過將目標 JDBC 類型注冊為 java.sql.Types.OTHER,可以使用此方法來讀取特定於資料庫的抽象數據類型。
參數:
parameterIndex - 第一個參數是 1,第二個參數是 2,依此類推
返回:
保存 OUT 參數值的 java.lang.Object
拋出:
SQLException - 如果 parameterIndex 無效;如果發生資料庫訪問錯誤,或者在關閉的 CallableStatement 上調用此方法

⑺ 一個關於java調用mysql 存儲過程的問題

在存儲過程中如果有查詢結果集,在java中執行存儲過程後,應使用其父介面Statement的getResultSet()方法獲取查詢結果集,此方法就返回ResultSet,如你上面若想獲取存儲過程中查詢結果集應如下:
ResultSet
rs
=
cst.getResultSet();
以下遍歷此rs即可...
...

⑻ java中如何調用資料庫的存儲過程

Java調用存儲過程的方法是通過調用Connection的實例方法prepareCall,prepareCall方法返回CallableStatement對象用於填充存儲過程的參數。prepareCall方法形參是調用存儲過程的sql語句,此參數的語法格式如下:

{callstoredProcereName(parameter-list)}

其中,storedProcereName是存儲過程名稱,parameter-list是存儲過程參數列表。

例如,存儲過程名為usp_test,有兩個輸入參數a,b。則調用代碼看起來如下所示:

=connection.prepareCall("{callusp_test(?,?)}");
callableStatement.setObject("a","value-1");
callableStatement.setObject("b","value-2");
callableStatement.execute();
熱點內容
安卓的face怎麼使用 發布:2024-11-26 15:05:50 瀏覽:89
存儲魔力象限2016 發布:2024-11-26 15:04:47 瀏覽:866
QQ填寫驗證碼是歷史密碼是什麼 發布:2024-11-26 15:04:16 瀏覽:506
vs2017編譯文件無效或損毀 發布:2024-11-26 15:04:16 瀏覽:598
騰訊微信如何更改登錄密碼 發布:2024-11-26 14:57:46 瀏覽:22
pythondict參數 發布:2024-11-26 14:49:41 瀏覽:106
ubuntu安裝linux源碼 發布:2024-11-26 14:48:52 瀏覽:745
百度雲解壓密碼忘記 發布:2024-11-26 14:35:36 瀏覽:864
最差擬合演算法 發布:2024-11-26 14:21:17 瀏覽:740
指令式編程 發布:2024-11-26 14:16:24 瀏覽:20