`
lpm528
  • 浏览: 84179 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

java调用存储过程

    博客分类:
  • java
 
阅读更多

**********************存储过程为了获得从存储过程传出的输出参数(out)

 

public List companyOpen(String getdata,int checkbiz) {
      Object[] objs=openCompanyJsonData(getdata,checkbiz);
      String sql="{call proc_open_entinfo(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";    //前六个问号为out参数,后面的为in的参数
     
      Map<Integer, Integer> map=new HashMap();              //为前六个out参数设置类型
      map.put(1,java.sql.Types.INTEGER);
      map.put(2,java.sql.Types.VARCHAR);
      map.put(3,java.sql.Types.INTEGER);
      map.put(4,java.sql.Types.VARCHAR);
      map.put(5,java.sql.Types.INTEGER);
      map.put(6,java.sql.Types.VARCHAR);
      List list1=callProcedureSql(sql,objs,map,7,17,2);        //调用存储过程,list1存的是out出来的数据
      return list1;
 }
    
     public List companyOpen2(String getdata,List list,int checkbiz) {
         
  int i_entinfoid = (Integer)list.get(2); 
  String i_grpcode=(String)list.get(3);
  int i_ywid = (Integer)list.get(4);
  String i_seatno=(String)list.get(5);
       
  Object[] objs=openCompanyJsonData(getdata,checkbiz); 
  
  Object[] objs2 = new Object[objs.length+4];
  objs2[0]=i_entinfoid;
  objs2[1]=i_grpcode;
  objs2[2]=i_ywid;
  objs2[3]=i_seatno;
  for(int i=4;i<objs2.length;i++){
   objs2[i]=objs[i-4];
  }
   
  String sql="{call p_open_grpinfo(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
   Map<Integer, Integer> map=new HashMap();
      map.put(1,java.sql.Types.INTEGER);
      map.put(2,java.sql.Types.VARCHAR);
      map.put(3,java.sql.Types.INTEGER);
      map.put(4,java.sql.Types.INTEGER);
      List list2=callProcedureSql(sql,objs2,map,5,19,1);
      System.out.println("执行第二个存储过程out出来的数据"+list2);
      list2.add(i_entinfoid);
      list2.add(i_grpcode);
      list2.add(i_ywid);
      list2.add(i_seatno);
     return list2;
 }
    
     public List companyOpen3(String getdata,List list,int checkbiz) {
    
    int i_grpinfoid = (Integer)list.get(2); 
   int i_grpfeesuiteid = (Integer)list.get(3);
   int i_entinfoid = (Integer)list.get(4); 
  String i_grpcode=(String)list.get(5);
  int i_ywid = (Integer)list.get(6);
  String i_seatno=(String)list.get(7);
   
   Object[] objs=openCompanyJsonData(getdata,checkbiz); 
   
   Object[] objs2 = new Object[objs.length+6];
  objs2[0]=i_grpinfoid;
  objs2[1]=i_grpfeesuiteid;
  objs2[2]=i_entinfoid;
  objs2[3]=i_grpcode;
  objs2[4]=i_ywid;
  objs2[5]=i_seatno;
  for(int i=6;i<objs2.length;i++){
   objs2[i]=objs[i-6];
  }
   String sql="{call proc_open_grpaccount(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
   Map<Integer, Integer> map=new HashMap();
      map.put(1,java.sql.Types.INTEGER);
      map.put(2,java.sql.Types.VARCHAR);
      List list3=callProcedureSql(sql,objs2,map,3,19,2);
      return list3;
 }

 

/**

*存储过程具体实现方法

*/

public List callProcedureSql(String sql, Object[] param_value,Map map,int start,int end,int datebasetype) {
   Connection conn=null;
   try{
   conn = DatabaseUtil.getConn(datebasetype);
   conn.setAutoCommit(false);
   CallableStatement cs = conn.prepareCall(sql);
      if (param_value != null) {                                   //为in的参数传值进去
    int i=0;
    for (int k = start; k <= end; k++) {
      cs.setObject(k, param_value[i]);
      i++;
    }
   }
     if(map!=null){                                                   //为out的参数设置类型
    Iterator it = map.entrySet().iterator();    
       while (it.hasNext()) {  
    
           Map.Entry entry = (Map.Entry) it.next();  
    
           Integer key = (Integer) entry.getKey();  
           Integer value = (Integer) entry.getValue();  
           cs.registerOutParameter(key, value);
       } 
   }
       cs.executeUpdate();
    cs.getMoreResults();
    conn.commit();
    Iterator it = map.entrySet().iterator();  
    List list=new ArrayList();
       while (it.hasNext()) {  
           Map.Entry entry = (Map.Entry) it.next();  
           Integer key = (Integer) entry.getKey();  
           Object ob=cs.getObject(key);
           list.add(ob);
    
       }
    return list;
   
  }catch (Exception e) {
   e.printStackTrace();
   return null;
  }finally{
   try {
    conn.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  
 }

/**

*获取已配置好的数据库的连接

*/

    public static Connection getConn(int databasetype)
    {
     if(databasetype==1)
     {
      try
        {
          Context ctx = new InitialContext();
          if (ctx == null )
            throw new Exception("_Error_No_Context_Found");

          DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/crm");

          if (ds != null)
          {
             return ds.getConnection();
          }
        }
      catch(Exception e)
      {
       e.printStackTrace();
      }
     }
     else if(databasetype==2)
     {
       try
          {
            Context ctx = new InitialContext();
            if (ctx == null )
              throw new Exception("_Error_No_Context_Found");

            DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/dhyx_ivr");

            if (ds != null)
            {
               return ds.getConnection();
            }
          }
        catch(Exception e)
        {
         e.printStackTrace();
        }
     }
      return null;
    }

 

**********************执行存储过程是为了获得里面select出来的内容则直接:

	1.存储过程语句:select 0 errcode,'复制成功' errmess(select出两个字段,并且每个字段由两个值构成)
	
	List<Object[]> list = querySql("{call sp_copyuseruid(?,?)}", paramValue);
			
			Integer errcode = null;
			if (list != null && !list.isEmpty()) {

				for (Object[] obj : list) {
					errcode = (Integer)obj[0];			
				}			
			}
			


   2.存储过程语句:select province  from 表 (select出一个字段,且只有一个值)
		
		List<String> list = super.querySql("{call get_province()}");	
 public List querySql(String sql){
  List list = null;
  EntityManager em = HibernateEntityManager.getCurrentEm();
  try {   
   Query query = em.createNativeQuery(sql);
   list = query.getResultList();
  } catch (Exception exception) {
   exception.printStackTrace();
  } 
  if (list == null || list.isEmpty())
   return null;
  else
   return list;
 }	

 *****************************************jdbc执行存储过程小例子:

数据库中的存储过程:

SQL>create or replace procedure 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;

 java调用:

 public static void main(String [] args)throws{
	 Class.forName("oracle.jdbc.driver.OracleDriver");
	 Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@x.x.x.x:x:xx",x,x);
	 CallableStatement ca=conn.prepareCall("{call p(?,?,?,?)}");
	 ca.registerOutParameter(3,Types.Integer);
	 ca.registerOutParameter(4,Types.Integer);
	 ca.setInt(1,3);
	 ca.setInt(2,4);
	 ca.setInt(4,5);
	 ca.execute();
	 System.out.println(ca.getInt(3));
	 System.out.println(ca.getInt(4));
	 ca.close();
	 conn.close();
 }

输出结果:

4
6

  

 ========================================================================

Class.forName("oracle.jdbc.driver.OracleDriver");  
      Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","scott","triger");  

    CallableStatement cs=conn.prepareCall("{call lpmtest10(?,?,?,?,?,?)}");
    //设置传入参数值
    cs.setString(1,"emp");
    cs.setInt(2, 2);
    cs.setInt(3, 10);
   //设置输出参数类型
    cs.registerOutParameter(4,Types.INTEGER);
    cs.registerOutParameter(5,Types.INTEGER);
    cs.registerOutParameter(6,OracleTypes.CURSOR);
    cs.execute();
   
    int totalrecord=cs.getInt(4);
    int pagesize=cs.getInt(5);
    System.out.println("++++++++++totalrecord:"+totalrecord);
    System.out.println("++++++++++pagesize:"+pagesize);
    ResultSet rs=(ResultSet) cs.getObject(6);     
    while(rs.next()){  
         System.out.println(rs.getString("ename"));  
     } 
  

 

 

分享到:
评论

相关推荐

    JAVA调用存储过程

    ### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...

    java 调用存储过程

    值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...

    java调用存储过程实例

    ### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...

    java调用存储过程(含out参数)

    总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...

    java调用存储过程同时返回值和多个table

    java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集

    java调用存储过程返回数组

    总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...

    Java调用存储过程

    Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...

    Java调用存储过程--传入集合参数

    ### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...

    java调用存储过程小结.pdf

    Java 调用存储过程小结 Java 调用存储过程是指在 Java 程序中调用数据库中的存储过程,以便实现复杂的业务逻辑和数据处理。存储过程是指保存在数据库并在数据库端执行的程序,可以使用特殊的语法在 Java 类中调用...

    Java调用存储过程的2种方法

    ### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...

Global site tag (gtag.js) - Google Analytics