當前位置:首頁 » 存儲配置 » javajdbc存儲過程

javajdbc存儲過程

發布時間: 2022-04-22 04:48:07

java編程中怎樣調用存儲過程

JDBC調用存儲過程: CallableStatement
在Java裡面調用存儲過程,寫法那是相當的固定:
Class.forName(....
Connection conn = DriverManager.getConnection(....
/**
*p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替
*其餘地方寫法固定
*/
CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");
/**
*告訴JDBC,這些個參數,哪些是輸出參數,輸出參數的類型用java.sql.Types來指定
*下面的意思是,第3個?和第4個?是輸出參數,類型是INTEGER的
*Types後面具體寫什麼類型,得看你的存儲過程參數怎麼定義的
*/
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
/**
*在我這里第1個?和第2個?是輸入參數,第3個是輸出參數,第4個既輸入又輸出
*下面是設置他們的值,第一個設為3,第二個設為4,第4個設置為5
*沒設第3個,因為它是輸出參數
*/
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
//執行
cstmt.execute();
//把第3個參數的值當成int類型拿出來
int three = cstmt.getInt(3);
System.out.println(three);
//把第4個參數的值當成int類型拿出來
int four = cstmt.getInt(4);
System.out.println(four);
//用完別忘給人家關了,後開的先關
cstmt.close();
conn.close();

JDBC調用存儲過程,掌握這一個程序足夠了.
以下是上面程序使用的存儲過程的代碼,我用的是Oracle資料庫,不過不論是什麼資料庫,對於你的程序,JDBC這一端寫法都是一樣的.

create or replace procere p
(v_a in number,v_b number,v_ret out number,v_temp in out number)
is
begin
if(v_a > v_b) then
v_ret := v_a;
else
v_ret := v_b;
end if;
v_temp := v_temp + 1;
end;

⑵ 通過jdbc怎麼調用存儲過程

使用 JDBC 驅動程序調用不帶參數的存儲過程時,必須使用 call SQL 轉義序列,ResultSet rs = stmt.executeQuery("{call dbo.ProcereName}"); 調用帶參數的存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列 CallableStatement cstmt = con.prepareCall("{call dbo.ProcereName(?, ?)}"); cstmt.setInt(1, java.sql.Types.INTEGER); cstmt.registerOutParameter(2, java.sql.Types.VARCHAR); cstmt.execute(); System.out.println("MANAGER ID: " + cstmt.getInt(1));System.out.println("MANAGER NAME: " + cstmt.getInt(2));

⑶ Java裡面的JDBC是什麼意思啊

Java資料庫連接是Java語言中用來規范客戶端程序如何來訪問資料庫的應用程序介面,提供了諸如查詢和更新資料庫中數據的方法。JDBC也是Sun Microsystems的商標。我們通常說的JDBC是面向關系型資料庫的。

這種類型的驅動把所有JDBC的調用傳遞給ODBC,再讓後者調用資料庫本地驅動代碼(也就是資料庫廠商提供的資料庫操作二進制代碼庫,例如Oracle中的oci.dll)。

API概述

JDBC API主要位於JDK中的java.sql包中(之後擴展的內容位於javax.sql包中),主要包括(斜體代表介面,需驅動程序提供者來具體實現):

DriverManager:負責載入各種不同驅動程序(Driver),並根據不同的請求,向調用者返回相應的資料庫連接(Connection)。Driver:驅動程序,會將自身載入到DriverManager中去,並處理相應的請求並返回相應的資料庫連接(Connection)。Connection:資料庫連接,負責與進行資料庫間通訊,SQL執行以及事務處理都是在某個特定Connection環境中進行的。

可以產生用以執行SQL的Statement。Statement:用以執行SQL查詢和更新(針對靜態SQL語句和單次執行)。PreparedStatement:用以執行包含動態參數的SQL查詢和更新(在伺服器端編譯,允許重復執行以提高效率)。CallableStatement:

用以調用資料庫中的存儲過程。SQLException:代表在資料庫連接的建立和關閉和SQL語句的執行過程中發生了例外情況(即錯誤)。

⑷ java中怎麼用存儲過程啊

public String deleteTopoData(final String Id) {
String str="";
str = (String)jdbcTemplate.execute(new ConnectionCallback(){
public Object doInConnection(Connection conn) throws SQLException,
DataAccessException {
conn.setAutoCommit(true);
CallableStatement stmt = null;
stmt = conn.prepareCall("{call PK_TEST.deleteData(?,?)}");
stmt.setString(1, Id);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute();
String out=stmt.getString(2);
stmt.close();
conn.setAutoCommit(true);

return out;
}
});
return str;
這是一個用jdbc調用存儲過程,並返回一個字元串的例子,希望能幫到你

⑸ java jdbc 如何從存儲過程的結果集中獲取列名

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
//獲取第一列的列名
String name = rsmd.getCatalogName(1);

⑹ java jdbc連接資料庫調用存儲過程插入數據

什麼對於你來說是最關鍵的?
首先你會不會jdbc連接資料庫執行一般的
sql語句
?如果不會,先去搜這方面的東西。
如果你只是糾結於
存儲過程
在java中的調用,那麼步驟如下:
1.事先寫一個存儲過程xx
2.用jdbc連接資料庫執行語句「exec
xx」就可以了。如果存儲過程帶參數a和b,語句就是「exec
xx
a
b」

⑺ JavaJDBC連接Oracle實現對資料庫增刪改變做存儲過程調用。 怎麼做啊 代碼是什麼啊

代碼都太大了都是一個工程的。15M,
說下思路,寫4個class,一個用來畫主界面,一個用來處理邏輯操作,一個用來增加,修改界面,一個用來處理增加,修改邏輯。

主界面類用3個panle,北,中,南,上面放查詢控制項,查詢按鈕,中間放table,下面放其他按鈕。
將主界面類作為邏輯處理操作類的一個屬性。讓他能訪問到主界面類中相應的控制項。寫上對於的控制項事件出來就可以了。

⑻ java怎樣通過jdbc來訪問oracle資料庫的存儲過程和存儲函數

//存儲過程create or replace Procere countBySal(
p_sal emp.sal%type,
p_count OUT number
)as
begin
select count(*) into p_count from emp where sal >= p_sql;
end countBySal; //調用步奏import java.sql.CallableStatement; //帶哦用存儲過程所必須的語句借口
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;public class EmpUtil {

public static int countBySal(double sal) throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:test";
Connection cn=DriverManager.getConnection(url, "scott", "tiger");
String sql="{call countBySal(?,?)}";//調用存儲過程的語句,call後面的就是存儲過程名和需要傳入的參數
CallableStatement cst=cn.prepareCall(sql);
cst.setDouble(1, sal);//設置in參數的值
cst.registerOutParameter(2, Types.INTEGER);//注冊out參數的類型
cst.execute();
int result = cst.getInt(2);
cst.close();
cn.close();
return result;
}

public static void main(String[] args) {
int count;
try {
count = EmpUtil.countBySal(3000);
System.out.println("工資在3000元以上的人數為:"+count);
} catch (Exception e) {
e.printStackTrace();
}

}

⑼ 1,如何在JDBC裡面調用一個存儲過程

最近做一個自動發郵件的schele,由於取數據的sql太長,直接分割很麻煩,就想到調用PL/SQL,網上查了資料做了練習,在此做下小結。
1、只有輸入參數而沒有返回結果的存儲過程。
sql:
1 create or replace procere prc_1(deptno in number,dname in varchar2,loc in varchar2)
2 is
3 begin
4 insert into dept values(deptno,dname,loc);
5 end prc_1;

java:

1 static void test1(){
2 Connection conn=null;
3 CallableStatement csmt=null;
4 try {
5 conn=JDBCUtils.getConnection();
6 conn.setAutoCommit(false);
7 csmt=conn.prepareCall("call prc_1(?,?,?)");
8 csmt.setInt(1,80);
9 csmt.setString(2,"ioc");
10 csmt.setString(3,"fhp");
11 csmt.execute();
12 conn.commit();
13 System.out.println("success insert data");
14 } catch (SQLException e) {
15 e.printStackTrace();
16 }
17 }

2、有輸入參數且有一個返回值的存儲過程。
sql:
1 create or replace procere prc_2(p_deptno in number,p_loc out varchar2) is
2 begin
3 select loc into p_loc from dept where deptno=p_deptno;
4 end prc_2;

熱點內容
比較與演算法 發布:2024-11-19 11:37:48 瀏覽:914
php直接下載 發布:2024-11-19 11:37:43 瀏覽:116
偽代碼能編譯嗎 發布:2024-11-19 11:36:59 瀏覽:140
vimpython語法提示 發布:2024-11-19 11:36:12 瀏覽:953
2010加密狗 發布:2024-11-19 11:36:07 瀏覽:801
安卓什麼海拔軟體好 發布:2024-11-19 11:13:13 瀏覽:121
數控銑削編程與操作 發布:2024-11-19 11:10:56 瀏覽:40
暴風影音的源碼 發布:2024-11-19 11:10:54 瀏覽:30
bat代碼加密 發布:2024-11-19 10:59:56 瀏覽:861
微信清除朋友圈緩存 發布:2024-11-19 10:32:08 瀏覽:139