`

[Java]通过Jdbc调用存储过程

阅读更多

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

分享到:
评论

相关推荐

    JDBC 调用存储过程方法

    在Java中,通过JDBC调用存储过程主要涉及以下几个步骤: 1. **加载驱动**:首先,你需要确保已经正确地加载了对应数据库的JDBC驱动。这通常通过`Class.forName()`方法完成,例如对于MySQL:“Class.forName(...

    JDBC调用存储过程

    本文将详细讲解如何使用JDBC来调用存储过程,以实现数据的增删改查操作。 首先,理解存储过程是数据库中的一个重要概念。存储过程是一组预先编译好的SQL语句集合,它可以包含控制流语句、输入/输出参数,甚至可以有...

    jdbc调用存储过程

    使用jdbc调用存储过程的代码示例 调用数据库连接池

    jdbc调用存储过程 函数例子

    本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的接口来访问不同类型的数据库。通过JDBC,开发者可以进行数据库连接、执行SQL...

    jdbc调用存储过程实现增删改查

    ### JDBC调用存储过程 1. **加载驱动**:使用`Class.forName()`方法加载Oracle的JDBC驱动,例如`oracle.jdbc.driver.OracleDriver`。 2. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 3....

    jdbc调用存储过程,函数,游标

    在IT行业中,数据库操作是不可或缺的一部分,而Java的JDBC(Java Database Connectivity)API则提供了与各种数据库交互的...通过阅读提供的博客链接,你将能获取更多关于JDBC调用存储过程和函数的实践经验及详细解释。

    jdbc执行存储过程

    在给定的代码片段中,我们可以看到一个典型的使用JDBC调用存储过程的例子。下面,我们将分步骤解析这段代码: 1. **加载JDBC驱动**: ```java try{ Class.forName(...

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

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

    java 调用存储过程

    在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    JDBC调用存储过程的小例子

    总之,通过JDBC调用存储过程,Java程序员可以充分利用数据库的能力,执行复杂的数据操作。理解并掌握这个过程对于开发高效、可靠的Java数据库应用程序至关重要。在实际项目中,确保正确处理异常,优化性能,并遵循...

    JAVA&C#调用存储过程代码

    以一个简单的例子展示Java调用存储过程: ```java import java.sql.*; public class CallProcedure { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:...

    Java面试题31.jdbc调用存储过程.mp4

    Java面试题31.jdbc调用存储过程.mp4

    JDBC调用MySQL5存储过程[文].pdf

    在软件开发中,JDBC...尽管JDBC调用存储过程相对简单,但设计和开发存储过程本身可能需要更深入的数据库知识和SQL编程技巧。在实际应用中,存储过程可以提高性能,封装复杂的业务逻辑,并提供数据库层面的安全性。

    Java调用数据库存储过程[mysql测试通过]

    本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...

    Java 调用存储过程

    总结起来,Java通过JDBC调用存储过程是一种强大而灵活的数据库操作方式,它可以提高性能,简化代码,并提供跨平台的移植性。在处理复杂的数据库操作或优化性能时,存储过程是一个值得考虑的解决方案。通过合理的设计...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    然后,我们编写 Java 代码调用存储过程。我们使用 `CallableStatement` 对象调用存储过程,并使用 `ResultSet` 对象处理结果集。 对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用...

Global site tag (gtag.js) - Google Analytics