java調用存儲過程帶參數
有參數直接在括弧那裡拼進去就好了,我就不詳細說明了。
conn = this.getsqlSession().getConfiguration().getEnvironment().getDataSource().getConnection();
if (isPackage) {
proc = conn.prepareCall("{call "+storedName+"()}");
}else{
proc = conn.prepareCall("{call "+storedName+"}");
}
proc.execute();
『貳』 java調用的存儲過程,能否傳入游標參數
java調用的存儲過程,不能傳入游標參數,但是存儲過程調用的內部存儲過程,可以存入游標參數。未完待續
『叄』 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中,怎樣調用帶輸出參數的存儲過程(轉)
exec proc_CSCO_SalesFctByStore 100,200,'name',@mg output print @mg 在Java中調用import java.sql.*; public class Test{ 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 proc_CSCO_SalesFctByStore(?,?,?,?)}"); //給存儲過程的第一個參數設置值
『伍』 java裡面怎麼調用存儲過程
最近做一個自動發郵件的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;
java:
1 static void test2(){
2 Connection conn=null;
3 CallableStatement csmt=null;
4 try {
5 conn=JDBCUtils.getConnection();
6 conn.setAutoCommit(false);
7 csmt=conn.prepareCall("call prc_2(?,?)");
8 csmt.setInt(1,70);
9 csmt.registerOutParameter(2,Types.VARCHAR);
10 csmt.execute();
11 conn.commit();
12 System.out.println("MIS位置:"+csmt.getString(2));
13 } catch (SQLException e) {
14 e.printStackTrace();
15 }
16 }
3、返回多行記錄(游標)的存儲過程。
sql:
首先要建立一個返回遊標,以便接收返回結果。
1 create or replace package testpackage is
2 type test_cursor is ref cursor;
3 end testpackage;
4
5 create or replace procere prc_3(p_cursor out testpackage.test_cursor)is
6 begin
7 open p_cursor for
8 select * from dept order by deptno;
9 end prc_3;
java:
1 static void test3(){
2 Connection conn=null;
3 CallableStatement csmt=null;
4 ResultSet rs=null;
5 try {
6 conn=JDBCUtils.getConnection();
7 conn.setAutoCommit(false);
8 csmt=conn.prepareCall("call prc_3(?)");
9 csmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
10 csmt.execute();
11 rs=(ResultSet) csmt.getObject(1);
12 while(rs.next()){
13 System.out.println(rs.getString("deptno")+'\t'+rs.getString("dname")+'\t'+rs.getString("loc"));
14 }
15 } catch (SQLException e) {
16 // TODO Auto-generated catch block
17 e.printStackTrace();
18 }finally{
19 JDBCUtils.free(rs, csmt, conn);
20 }
21 }
『陸』 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();
『柒』 如何在java中調用存儲過程
使用 JDBC 驅動程序調用不帶參數的存儲過程時,必須使用 call SQL 轉義序列,
ResultSetrs=stmt.executeQuery("{calldbo.ProcereName}");
調用帶參數的存儲過程時,必須結合SQLServerConnection類的prepareCall方法使用callSQL轉義序列
CallableStatementcstmt=con.prepareCall("{calldbo.ProcereName(?,?)}");
cstmt.setInt(1,java.sql.Types.INTEGER);
cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);
cstmt.execute();
System.out.println("MANAGERID:"+cstmt.getInt(1));
System.out.println("MANAGERNAME:"+cstmt.getInt(2));