使用JDBC操作存储过程

 

使用JDBC操作存储过程,可以借助于一个借口CallableStatement实现。

此时调用存储过程的sql语句为:{call procedure_name [(arg1),(arg2)]}

而CallableStatement可以通过数据库连接对象的prepareCall()方法获得

例如:

conn.prepareCall(sql);

如果此时的存储过程有输出参数,可以通过他的registerOutParameter()方法将输出参数注册为JDBC类型。例如:

registerOutParameter(int parameterIndex,int sqlType)

下面看一个统计学生人数示例,首先看数据库中的记录:

不难看出学生表中公有七条记录。

下面写一个存储过程统计学生表中的人数。

create or replace procedure getStudentCount(v_student out number) is
begin
  select count(*) into v_student from student;
end getStudentCount;

然后测试一下这个存储过程:

declare
  v_count number;
begin
  getstudentCount(v_count);
  dbms_output.put_line(v_count);
end;

输出结果为7。存储过程没有问题。

然后在看如何使用JDBC调用存储过程。

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ProcedureDemo {
	public static void main(String[] args) {
		Connection conn = null;
		int studentCount = 0;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL",
					"myhr", "myhr");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		String sql = "{call getStudentCount(?)}";
		try {
			CallableStatement proc = conn.prepareCall(sql);
			proc.registerOutParameter(1, java.sql.Types.INTEGER);
			proc.execute();
			studentCount = proc.getInt(1);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println(studentCount);
	}
}

这时在控制台输出7,证明调用存储过程成功。

时间: 2024-11-08 23:30:15

使用JDBC操作存储过程的相关文章

jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一个客户可以对应多个订单,一个订单只属于一个客户! * 建表原则: * 在多的一方创建一个字段,作为外键指向一的一方的主键!!! * 多对多: * 一个学生可以选择多个课程,一个课程也可以被多个学生选择! * 建表原则: * 创建第三张表,第三张表中放入两个字段,作为外键分别指向多对多双方的主键! *

Java数据库连接——JDBC调用存储过程,事务管理和高级应用

阅读目录 一.JDBC常用的API深入详解及存储过程的调用1.存储过程(Stored Procedure)的介绍2.JDBC调用无参存储过程3.JDBC调用含输入参数存储过程4.JDBC调用含输出参数存储过程二.JDBC的事务管理1.JDBC实现事务管理2.通过代码实现事物的管理三.数据库连接池(dbcp.c3p0)1.dbcp使用步骤2.c3p0使用步骤3.连接池总结四.JDBC的替代产品(Hibernate.Mybatis)1.Commons-dbutils 2.Hibernate简介3.M

Java数据库连接--JDBC调用存储过程,事务管理和高级应用

相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它.存储过程是数据库中 的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 一个存储过程是一个可编程的函数,它在数据

JDBC操作数据库的学习(1)

单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的连接驱动,应用程序通过这些驱动来操作数据库: 但是这里就又有一个问题了,不同的数据库有各自的驱动程序,而一个应用程序要操作不同的数据库,那么就要懂得要使用的数据库的驱动如何操作,这样就增加了学习成本.好在我们使用Java开发应用,而Java中只需要使用JDBC就能操作所有的数据库,因为JDBC提供的

【转载】JDBC操作步骤及数据库连接操作

转自:http://blog.csdn.net/joywy/article/details/7731305 一.JDBC操作步骤 1.加载数据库驱动程序:各个数据库都会提供JDBC的驱动程序开发包,直接把JDBC操作所需要的开发包(一般为*.jar或*.zip)直接配置到classpath路径即可. 2.连接数据库:根据各个数据库的不同连接的地址也不同,此连接地址将由数据库厂商提供,一般在使用JDBC连接数据库的时候都要求用户输入数据库连接的用户名和密码,用户在取得连接之后才可以对数据库进行查询

JDBC操作Oracle,根据日期查询

方法一: 1 SimpleDateFormat dateformat=new SimpleDateFormat("yyyy-MM-dd"); 2 String today=dateformat.format(new Date()); 3 4 String delSql = "delete from ssd_pms_forecast_recode where forecasteNum = '"+forecastNum+"' and forecasteTime

oracle事务处理及实例演示jdbc操作批量删除

事务 作为逻辑处理的基本单位,对于数据库操作来说由一条或者多条sql语句来构成.当然还有针对非数据库操作的,如在计算机中设置的还原点即是一个很好的应用. 对于事务的基本性质在另一篇中有所叙述:SQL 事务及实例演示 oracle和sql server在事务上区别 sql server中的事务一般分为隐式事务.显式事务.自动提交事务. 自动事务:对于sql server来说,当客户端提交一条sql语句时,这时候sql server都会自动启动一个事务:对于这样的事务,在执行完sql语句后会自动提交

java jdbc操作SQLServer数据库

public static void main(String args[]){         System.out.println(321);         PreparedStatement ps = null;         ResultSet rs = null;         Connection ct = null;         try{             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDri

JDBC操作数据库的学习(2)

在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本篇就在简单开发中如何对上一篇的例子进行“升级”,满足简单开发中对数据库的增删改查(CRUD). 如果按照上一篇中的例子,那么我们在做增删改查的话将会出现每个方法都要获取连接,释放资源,代码会出现很大的重复性,因此我们应该将每个增删改查每个方法中可以复用的代码抽取出来,同时为了能切换数据库方便,也该将一些配置信