技术开发 频道

在WEBSPHERE下调用ORACLE存储过程

    【IT168 技术文档】在WEBSPHERE上数据源配置都为THIN方式。

    在使用存储过程时,分两类:返回值中包括了数组的处理,与不包括数组的处理:

    不包括数组的处理:

InitialContext initCtx = null; //上下文参数 Connection con=null;//数据库的连接 Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); props.put(Context.PROVIDER_URL,url);//在WEBSPHERE中就是这样初始化上下文。 initCtx = new InitialContext(props); DataSource ds = (javax.sql.DataSource) initCtx.lookup("jdbc/newThin"); //直接用javax.sql.DataSource得到数据源,也只能处理不带数组返回值的处理。 con= ds.getConnection(); CallableStatement callsmt = null; callsmt = con.prepareCall( "{call MCM_FEE.proc_search_owefee(?,?,?,?,?,?)}"); //预处理存储过程 callsmt.setString(1,areaid); callsmt.setInt(2, Integer.parseInt(acctid)); //使用存储过程的入参 callsmt.registerOutParameter(3,OracleTypes.NUMBER); callsmt.registerOutParameter(4,OracleTypes.NUMBER); callsmt.registerOutParameter(5,OracleTypes.CHAR); callsmt.registerOutParameter(6,OracleTypes.CHAR); //存储过程的出参 callsmt.execute(); //执行 O_predpstval = callsmt.getFloat(5); //得到出参的值

    包括数组返回值的处理

    有两种方式可以处理:

    不通过中间件数据源,直接连到数据库,该种方式不可取。加大中间件,数据库的压力,会耗费更多的时间在取得连接上

Connection conn = null; PreparedStatement stmt = null; OracleDataSource ods = new OracleDataSource(); //在这里必须使用OracleDataSource类,不能使用DataSource ods.setDriverType("oci8"); //设置驱动类型,强烈建议使用‘thin’方式,不要使用‘oci8’ ods.setTNSEntryName("ora92lx.idc.oracle.com"); //设置TNS ods.setURL(“jdbc:oracle:oci8:@22”); //设置地址,这是oci8的方式,thin的方式为:jdbc:oralce:thin:@192.130.1.22:1521:yyora2 ods.setUser(obsconfig.getDBUserName()); //用户名 ods.setPassword(obsconfig.getDBPassword()); //用户密码 conn = ods.getConnection(); //得到连接 OracleCallableStatement stmt = null; //必须使用OracleCallableStatement stmt =(OracleCallableStatement)con.prepareCall ("BEGIN MCM_FUNLIB.PROC_GETHOTFEE_MODEL_MONTH(?,?,?,?,?,?,?,?,?); END;"); 设置入参。 stmt.setString(1,subscrbid); stmt.setString(2,svcid); stmt.setString(3,areaid); stmt.setString(4,modelid);
0
相关文章