Java调用存储过程笔记

linjy222 贡献于2011-08-08

作者 雨林木风  创建于2011-03-29 08:19:00   修改者雨林木风  修改于2011-03-29 09:43:00字数3590

文档摘要:在Java中有很多方法调用存储过程。Jdbc,Spring中的SimpleJdbcTemplate也很好的封装了调用存储过程的方法。Spring中调用存储过程要求jdk的版本是jdk1.5以上的版本。这里介绍几种调用方法。
关键词:

JAVA调用Oracle的存储过程 ---唐龙佳 在Java中有很多方法调用存储过程。Jdbc,Spring中的SimpleJdbcTemplate也很好的封装了调用存储过程的方法。Spring中调用存储过程要求jdk的版本是jdk1.5以上的版本。这里介绍几种调用方法。 方法一:jdbc调用没有返回值存储过程 1. 首先创建一张表,命名为testproc create table testproc( id varchar2(10), name varchar2(10) ); 2.在此表上创建没有返回值的存储过程,命名为prc_1 create or replace procedure prc_1(t_id in varchar2,t_name in varchar2) as begin insert into testproc values(t_id,t_name); end prc_1; 3.在Java调用的代码如下: package test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; public class MyTest01 { public static final String DRIVERCLASSNAME = "oracle.jdbc.driver.OracleDriver"; public static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl"; public static final String USERNAME = "scott"; public static final String PWD = "tiger"; public static void main(String[] args) { callProc1(); } public static void callProc1() { try { Class.forName(DRIVERCLASSNAME).newInstance(); Connection conn = DriverManager.getConnection(URL, USERNAME, PWD); conn.setAutoCommit(false); CallableStatement cstmt = null; cstmt = conn.prepareCall("{ call prc_1(?,?) }"); cstmt.setString(1, "100"); cstmt.setString(2, "TestOne"); cstmt.execute(); conn.commit(); } catch (Exception e) { e.printStackTrace(); } } } 执行代码后。查看数据库中表的信息。 4.查看表信息 方法二:Jdbc调用有返回值的存储过程。 1. 在testproc表上创建有返回值的存储过程,命名为prc_2 create or replace procedure prc_2(t_id IN VARCHAR2,t_name OUT VARCHAR2) AS begin SELECT name INTO t_name FROM testproc WHERE id= t_id and rownum<2; end prc_2; 2. Java调用方法代码如下: public static void callProc2() { try { Class.forName(DRIVERCLASSNAME).newInstance(); Connection conn = DriverManager.getConnection(URL, USERNAME, PWD); conn.setAutoCommit(false); CallableStatement cstmt = null; cstmt = conn.prepareCall("{ call prc_2(?,?) }"); cstmt.setString(1, "1"); cstmt.registerOutParameter(2,Types.VARCHAR); cstmt.execute(); conn.commit(); String testPrint = cstmt.getString(2); System.out.println("返回值:::::: " + testPrint); } catch (Exception e) { e.printStackTrace(); } } 3. 执行后的结果如下: 方法三:JdbcTemplate调用Oracle无返回值的存储过程。 此处不写存储过程的具体代码和表的信息代码了,这是我在项目中的部分代码展示。 实例方法1:使用hibernate中的jdbc方法。 public void CallProcedure() throws ServiceException { Session session = getHibernateTemplate().getSessionFactory(). getCurrentSession(); Connection con = session.connection(); CallableStatement cs; try {// 调用存储过程 cs = con.prepareCall("{call " + STOREPROC+ "(?)}"); int sheet = Integer.parseInt(sheetName); cs.setBigDecimal(1, new BigDecimal(sheet)); cs.execute(); cs.close(); } catch (SQLException e) { e.printStackTrace(); } } 实例方法2:主要用的是内部类的知识实现的。 public void CallProcedure() throws ServiceException { JdbcTemplate template = this.getJdbcTemplate(); template.execute(new CallableStatementCreator() { public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call " + STOREPROC + "(?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); int sheet = Integer.parseInt(sheetName); cs.setBigDecimal(1, new BigDecimal(sheet)); return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { cs.execute(); return null; } }); } 方法四:JdbcTemplate调用Oracle有回值的存储过程。 这是项目中的部分代码,Java代码的展示如下: public String CallProcedure() throws ServiceException { JdbcTemplate template = this.getJdbcTemplate(); String s = (String) template.execute(new CallableStatementCreator() { public CallableStatement createCallableStatement(Connection con)throws SQLException { String storedProc = "{call " + GlIndustryDataNormalVO.STOREPROC+ "(?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.registerOutParameter(1, OracleTypes.VARCHAR); // 注册输出参数的类型 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List resultsMap = new ArrayList(); cs.execute(); return cs.getString(1); } }); return s; } Java调用存储过程的方法很多。以上只是部分总结。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档