**********************存储过程为了获得从存储过程传出的输出参数(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中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...
值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
Java 调用存储过程小结 Java 调用存储过程是指在 Java 程序中调用数据库中的存储过程,以便实现复杂的业务逻辑和数据处理。存储过程是指保存在数据库并在数据库端执行的程序,可以使用特殊的语法在 Java 类中调用...
### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...