您的位置:

java存储过程,java如何调用存储过程

本文目录一览:

java代码怎么调用存储过程

方法如下:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;/***LoadJDBCDriver*最基本的方法通过JDBC连接数据库*@authorJacob**/publicclassLoadByPrimary{publicstaticvoidmain(String[]args)throwsClassNotFoundException{Stringdriver="oracle.jdbc.OracleDriver";Connectioncn=null;/***Class.forName手动加载一个类到方法区,Driver类中包含自动注册驱动的静态代码块*会自动在DriverManager中注册驱动*/Class.forName(driver);Stringurl="jdbc:oracle:thin:@localhost:1521:ORACLE";//1521代表端口号,默认的Stringuser="用户名";Stringpwd="密码";try{/**Connection是接口,返回值是一个引用对象,是Oracle驱动提供实现类ojdbc7.jar*使用JDBCAPI接口,实际上是驱动实现类*/cn=DriverManager.getConnection(url,user,pwd);Statementstmt=cn.createStatement();Stringsql="SELECT*FROMstu_empWHEREdeptno=10";ResultSetrs=stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getInt("empno")+""+rs.getString("ename")+""+rs.getString("job"));}rs.close();stmt.close();}catch(SQLExceptione){e.printStackTrace();}finally{try{if(cn!=null){cn.close();}}catch(SQLExceptione2){e2.printStackTrace();}}}}这是通过preparedstatement实现更新数据,这里我把连接数据库的方法进行了封装,每次直接调用了。publicstaticvoidmain(String[]args){PreparedStatementDemopsd=newPreparedStatementDemo();psd.updateSalary("JACOB",3000);psd.selectSalary("JACOB");}publicvoidupdateSalary(Stringename,doublesal){Stringsql="Updatestu_empsetsal=?Whereename=?";Connectioncn=null;PreparedStatementps=null;try{cn=DBPUtil.getConnection();ps=cn.prepareStatement(sql);ps.setDouble(1,sal);ps.setString(2,ename);intnum=ps.executeUpdate();System.out.println("提示:总共有"+num+"条数据已经更新!");}catch(SQLExceptione){e.printStackTrace();}finally{DBUtil.stmtClose(ps);DBUtil.connClose(cn);}}publicvoidselectSalary(Stringname){Stringsql="Select*Fromstu_empWhereename=?";Connectioncn=null;PreparedStatementps=null;ResultSetrs=null;try{cn=DBPUtil.getConnection();ps=cn.prepareStatement(sql);ps.setString(1,name);rs=ps.executeQuery();while(rs.next()){System.out.println(rs.getString("ename")+"的工资是:"+rs.getInt("sal"));}}catch(SQLExceptione){e.printStackTrace();}finally{DBUtil.stmtClose(ps);DBUtil.rsClose(rs);DBUtil.connClose(cn);}}}

java里面怎么调用存储过程

最近做一个自动发邮件的schedule,由于取数据的sql太长,直接分割很麻烦,就想到调用PL/SQL,网上查了资料做了练习,在此做下小结。

1、只有输入参数而没有返回结果的存储过程。

sql:

1 create or replace procedure 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 procedure 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 procedure 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存储过程

1、操作系统:windows 2000 Server

2、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版

3、安装路径:C:\ORACLE

实现方法:

1、  创建一个文件为TEST.java

public class TEST

{

public static void main (String args[])

{

System.out.PRintln("HELLO THIS iS A JAVA PROCEDURE");

}

}

2、  javac TEST.java

3、  java TEST

4、  SQL conn system/manager

SQL grant create any Directory to scott;

SQL conn scott/tiger

SQL create or replace directory test_dir as 'd:\'

目录已创建。

SQL create or replace java class using bfile(test_dir,'TEST.CLASS')

2 /

Java 已创建。

SQL select object_name,object_type,STATUS from user_objects;

SQL create or replace procedure test_java

as language java

name 'TEST.main(java.lang.String[])';

/

过程已创建。

SQL set serveroutput on size 5000

SQL call dbms_java.set_output(5000);

调用完成。

SQL execute test_java;

HELLO THIS iS A JAVA PROCEDURE

PL/SQL 过程已成功完成。

SQL call test_java();

HELLO THIS iS A JAVA PROCEDURE

调用完成。

在JAVA中怎么调用带参数的存储过程?

JDBC调用存储过程: CallableStatement\x0d\x0a在Java里面调用存储过程,写法那是相当的固定:\x0d\x0aClass.forName(....\x0d\x0aConnection conn = DriverManager.getConnection(....\x0d\x0a/**\x0d\x0a*p是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替\x0d\x0a*其余地方写法固定\x0d\x0a*/\x0d\x0aCallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");\x0d\x0a/**\x0d\x0a*告诉JDBC,这些个参数,哪些是输出参数,输出参数的类型用java.sql.Types来指定\x0d\x0a*下面的意思是,第3个?和第4个?是输出参数,类型是INTEGER的\x0d\x0a*Types后面具体写什么类型,得看你的存储过程参数怎么定义的\x0d\x0a*/\x0d\x0acstmt.registerOutParameter(3, Types.INTEGER);\x0d\x0acstmt.registerOutParameter(4, Types.INTEGER);\x0d\x0a/**\x0d\x0a*在我这里第1个?和第2个?是输入参数,第3个是输出参数,第4个既输入又输出\x0d\x0a*下面是设置他们的值,第一个设为3,第二个设为4,第4个设置为5\x0d\x0a*没设第3个,因为它是输出参数\x0d\x0a*/\x0d\x0acstmt.setInt(1, 3);\x0d\x0acstmt.setInt(2, 4);\x0d\x0acstmt.setInt(4, 5);\x0d\x0a//执行\x0d\x0acstmt.execute();\x0d\x0a//把第3个参数的值当成int类型拿出来\x0d\x0aint three = cstmt.getInt(3);\x0d\x0aSystem.out.println(three);\x0d\x0a//把第4个参数的值当成int类型拿出来\x0d\x0aint four = cstmt.getInt(4);\x0d\x0aSystem.out.println(four);\x0d\x0a//用完别忘给人家关了,后开的先关\x0d\x0acstmt.close();\x0d\x0aconn.close();\x0d\x0a\x0d\x0aJDBC调用存储过程,掌握这一个程序足够了.\x0d\x0a以下是上面程序使用的存储过程的代码,我用的是Oracle数据库,不过不论是什么数据库,对于你的程序,JDBC这一端写法都是一样的.\x0d\x0a\x0d\x0acreate or replace procedure p\x0d\x0a(v_a in number,v_b number,v_ret out number,v_temp in out number)\x0d\x0ais\x0d\x0abegin\x0d\x0aif(v_a v_b) then\x0d\x0av_ret := v_a;\x0d\x0aelse\x0d\x0av_ret := v_b;\x0d\x0aend if;\x0d\x0av_temp := v_temp + 1;\x0d\x0aend;

java中如何调用数据库的存储过程

Java调用存储过程的方法是通过调用Connection的实例方法prepareCall,prepareCall方法返回CallableStatement对象用于填充存储过程的参数。prepareCall方法形参是调用存储过程的sql语句,此参数的语法格式如下:

{call storedProcedureName(parameter-list)}

其中,storedProcedureName是存储过程名称,parameter-list是存储过程参数列表。

例如,存储过程名为usp_test,有两个输入参数a,b。则调用代码看起来如下所示:

CallableStatement callableStatement = connection.prepareCall("{call usp_test(?,?)}");

callableStatement.setObject("a","value-1");

callableStatement.setObject("b","value-2");

callableStatement.execute();

什么是java中的存储过程?请教高手帮忙

java本身是没储存过程的,

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,使用时只要调用即可。

比如说,在java调用oracle存储过程。