java调用存储过程
来源:互联网 发布:事业单位人事软件 编辑:程序博客网 时间:2024/06/17 22:34
1、只有输入参数而没有返回结果的存储过程。
sql:
1 create or replace procedure prc_1(deptno in number,dname in varchar2,loc in varchar2)2 is3 begin4 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) is2 begin3 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 is2 type test_cursor is ref cursor;3 end testpackage;4 5 create or replace procedure prc_3(p_cursor out testpackage.test_cursor)is6 begin7 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 block17 e.printStackTrace();18 }finally{19 JDBCUtils.free(rs, csmt, conn);20 }21 }
执行结果:
总结:
上面的小程序只是为了快速入门Java调用存储过程,那么在什么情况下使用Java调用存储过程比较合适呢?
工具类:
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 public class JDBCUtils { 8 private static String url="jdbc:oracle:thin:@//localhost:1521/myoracle"; 9 private static String user="scott";10 private static String password="tiger";11 12 private JDBCUtils(){13 14 }15 16 static{17 try {18 Class.forName("oracle.jdbc.driver.OracleDriver");19 } catch (ClassNotFoundException e) {20 throw new ExceptionInInitializerError(e);21 }22 }23 24 public static Connection getConnection() throws SQLException{25 return DriverManager.getConnection(url, user, password);26 }27 28 public static void free(ResultSet rs,Statement st,Connection conn){29 try{30 if(rs!=null)31 rs.close();32 }catch(SQLException e){33 e.printStackTrace();34 }finally{35 try{36 if(st!=null)37 st.close();38 }catch(SQLException e){39 e.printStackTrace();40 }finally{41 if(conn!=null)42 try {43 conn.close();44 } catch (SQLException e) {45 e.printStackTrace();46 }47 }48 }49 }50 }
0 0
- Java调用存储过程
- Java 调用存储过程
- Java 调用存储过程
- JAVA调用存储过程
- java调用存储过程
- java调用存储过程
- Java调用存储过程
- java调用存储过程
- java调用存储过程
- java 调用存储过程
- JAVA调用存储过程
- java调用存储过程
- java调用存储过程
- java 调用存储过程
- Java调用存储过程
- java调用存储过程
- java调用存储过程
- Java调用存储过程
- 【NOIP2016提高A组模拟9.15】Osu
- 9.21noip模拟总结
- apply/call
- 使用HTML5中的canvas绘制灰太狼图像
- RecyclerView-重新进入APP仍保存拖拽、删除后状态(数据改变状态)-3
- java调用存储过程
- VMware Workstation10.0 打开系统的时候报错浏览器主页被篡改
- Kt inect
- mysql 字符集
- Android自定义View——自定义搜索框(SearchView)
- 正则判断
- 介绍AIDL
- JS立即执行函数理解
- nginx 和 Tomcat 整合