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));