1.sql语句:call storeProcedure(a,b,c)
2.存储过程有返回结果集或结果做法:
Connection conn = null; CallableStatement cs = null; ResultSet rs = null; try { conn = jdbcTemplate.getDataSource().getConnection(); cs = conn.prepareCall(sqlLibrary.EventLog_listEventLogByAppIdNStatus); conn.setAutoCommit(false); cs.setString(1, app_flag); cs.setString(2, status); cs.setString(3, eventMaxCount); cs.registerOutParameter(4, OracleTypes.CURSOR); cs.execute(); rs = (ResultSet) cs.getObject(4); while (rs.next()) { event_list.add(new Event(rs)); } rs.close(); conn.commit(); conn.setAutoCommit(true); } catch (SQLException e) { logger.error("sql exception: " + e.getMessage()); /// } catch (DataAccessException e) { dbLogger.error("One PNS DB is down. Exception: " + e.getMessage()); } finally { try { if (rs != null) rs.close(); if (cs != null) cs.close(); if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } }
可以看到这是存储过程(Oracle)有返回结果集的,output是一个cursor
ResultSet:
public Event(ResultSet rs) throws SQLException{ this.event_id = rs.getString("event_id"); this.user_id = rs.getString("user_id"); this.msisdn = rs.getString("msisdn"); this.service_name = rs.getString("service_name"); this.quota_status = rs.getString("quota_status"); this.quota_name = rs.getString("quota_name"); this.event_code = rs.getString("event_code"); this.app_flag = rs.getInt("app_flag"); this.status = rs.getInt("status"); this.event_date = getOracleTimestamp(rs.getObject("event_date")); this.last_update_date = getOracleTimestamp(rs.getObject("last_update_date")); this.event_content = rs.getString("event_content"); }
3.没有返回结果集的
Connection conn = null; CallableStatement cs = null; ResultSet rs = null; int rs_code = 99; String rs_msg = null; List<CsvModel> searchResultList = new ArrayList<CsvModel>(); try{ conn = jdbcTemplate.getDataSource().getConnection(); cs = conn.prepareCall(Constant.UMGCsvStoreProcedure_call); logger.debug("=======param in:{}", csvSP.toString()); cs.setString(1, csvSP.getSubmitTimeFro()); cs.setString(2, csvSP.getSubmitTimeTo()); /*cs.setTimestamp(1, Timestamp.valueOf(csvSP.getSubmitTimeFro())); cs.setTimestamp(2, Timestamp.valueOf(csvSP.getSubmitTimeTo()));*/ cs.setString(3, csvSP.getCorpId()); cs.setString(4, csvSP.getSenderList()); cs.setString(5, csvSP.getRecipientList()); cs.setString(6, csvSP.getChannel()); cs.setString(7, csvSP.getDirection()); cs.setString(8, null); cs.setString(9, null); cs.registerOutParameter(10, Types.INTEGER); cs.registerOutParameter(11, Types.VARCHAR); cs.execute(); rs = cs.getResultSet(); rs_code = (int) cs.getObject(10); rs_msg = (String) cs.getObject(11); if (rs_code == 0) { while (rs.next()) { searchResultList.add(new CsvModel(rs)); } } rs.close(); }catch (DataAccessException e) { dbLogger.error("DB is down. Exception is [{}]", e.getMessage()); throw e; } catch (SQLException e) { logger.error("-- Error occur, exception is [{}]", e.getMessage()); e.printStackTrace(); }catch (Exception e) { logger.error("-- Error occur, exception is [{}]", e.getMessage()); throw e; }finally { try { if (rs != null) rs.close(); if (cs != null) cs.close(); if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } }
可以看出,基本是和有结果集的操作差不多,但由于我的select statement不是以结果集游标的形式返回,所以要用上getResultSet()来获得.
参考:
1.JdbcTemplate执行存储过程的3种方式:https://blog.csdn.net/jiaweicheng77/article/details/84564092
2.Using Unbounded SELECT Statements:https://learning.oreilly.com/library/view/mysql-stored-procedure/0596100892/ch05s04.html
相关推荐
在Java中,通过JDBC调用存储过程主要涉及以下几个步骤: 1. **加载驱动**:首先,你需要确保已经正确地加载了对应数据库的JDBC驱动。这通常通过`Class.forName()`方法完成,例如对于MySQL:“Class.forName(...
本文将详细讲解如何使用JDBC来调用存储过程,以实现数据的增删改查操作。 首先,理解存储过程是数据库中的一个重要概念。存储过程是一组预先编译好的SQL语句集合,它可以包含控制流语句、输入/输出参数,甚至可以有...
使用jdbc调用存储过程的代码示例 调用数据库连接池
本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的接口来访问不同类型的数据库。通过JDBC,开发者可以进行数据库连接、执行SQL...
### JDBC调用存储过程 1. **加载驱动**:使用`Class.forName()`方法加载Oracle的JDBC驱动,例如`oracle.jdbc.driver.OracleDriver`。 2. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 3....
在IT行业中,数据库操作是不可或缺的一部分,而Java的JDBC(Java Database Connectivity)API则提供了与各种数据库交互的...通过阅读提供的博客链接,你将能获取更多关于JDBC调用存储过程和函数的实践经验及详细解释。
总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。
在给定的代码片段中,我们可以看到一个典型的使用JDBC调用存储过程的例子。下面,我们将分步骤解析这段代码: 1. **加载JDBC驱动**: ```java try{ Class.forName(...
总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...
在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...
总之,通过JDBC调用存储过程,Java程序员可以充分利用数据库的能力,执行复杂的数据操作。理解并掌握这个过程对于开发高效、可靠的Java数据库应用程序至关重要。在实际项目中,确保正确处理异常,优化性能,并遵循...
以一个简单的例子展示Java调用存储过程: ```java import java.sql.*; public class CallProcedure { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:...
Java面试题31.jdbc调用存储过程.mp4
在软件开发中,JDBC...尽管JDBC调用存储过程相对简单,但设计和开发存储过程本身可能需要更深入的数据库知识和SQL编程技巧。在实际应用中,存储过程可以提高性能,封装复杂的业务逻辑,并提供数据库层面的安全性。
本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...
总结起来,Java通过JDBC调用存储过程是一种强大而灵活的数据库操作方式,它可以提高性能,简化代码,并提供跨平台的移植性。在处理复杂的数据库操作或优化性能时,存储过程是一个值得考虑的解决方案。通过合理的设计...
在IT领域,特别是数据库操作与Java编程的交集部分,调用存储过程是常见的需求之一。根据提供的文件信息,我们可以深入解析如何在Java中通过JDBC(Java Database Connectivity)调用Oracle数据库的存储过程。 ### ...