例子1:调用有返回值的存储过程
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestProc {
private static Connection connection = null;
public static Connection getConnection(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void main(String[] args) {
Connection connection = TestProc.getConnection();
try{
String poetName = "silas";
int id = 0;
// 设置调用的存储过程名及参数情况
CallableStatement proc = connection.prepareCall("{ call test_proc(?, ?) }");
// 设置输入参数值1的值
proc.setString(1, poetName);
// 设置输出参数及返回类型
proc.registerOutParameter(2,java.sql.Types.INTEGER);
proc.execute();
// 取出存储过程的返回值
id = proc.getInt(2);
System.out.println("人员ID为:"+id);
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
// 以下为存储过程的定义
// create proc test_proc
// @username varchar(20),@pid int output
// as
// declare @uid int
// set @uid = 0
// select @uid=userid from users where username=@username
// if @uid<>0
// set @pid = @uid
// else
// set @pid = 0
}
}
当前以上存储过程中调用了users表,此处建表省略.
例子2:调用返回结果集的存储过程
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestProcResultSet {
private static Connection connection = null;
public static Connection getConnection(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void main(String[] args) {
Connection connection = TestProc.getConnection();
try{
ResultSet rs = null;
// 设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数
CallableStatement proc = connection.prepareCall("{ call test_proc_resultset(?)}");
// 设置输入参数
proc.setInt(1, 11);
// 调入存储过程
proc.execute();
// 取出存储过程的结果集
rs = proc.getResultSet();
for(int i=0;rs.next();i++)
System.out.println("Result的大小为:"+rs.getString(2));
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
// create proc test_proc_resultset
// @id int
// as
// select * from users where userid=@id
}
}
例子3:调用有默认值的存储过程
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestDefaultProc {
private static Connection connection = null;
public static Connection getConnection(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void main(String[] args) {
Connection connection = TestDefaultProc.getConnection();
try{
int id = 0;
// 设置调用的存储过程名及默认参数的情况
CallableStatement proc = connection.prepareCall("{ call test_default_proc(default, ?) }");
// 设置输出参数及返回类型
proc.registerOutParameter(1,java.sql.Types.INTEGER);
proc.execute();
// 取出存储过程的返回值
id = proc.getInt(1);
System.out.println("人员ID为:"+id);
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
// 以下为存储过程的定义
// create proc test_default_proc
// @username varchar(20)='silas',@pid int output
// as
// declare @uid int
// set @uid = 0
// select @uid=userid from users where username=@username
// if @uid<>0
// set @pid = @uid
// else
// set @pid = 0
}
例子4:调用返回两个以上结果集的存储过程(重点)
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestProcMulResultSet {
private static Connection connection = null;
public static Connection getConnection(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb","sa","sa");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void main(String[] args) {
Connection connection = TestProc.getConnection();
try{
ResultSet rs = null;
// 设置调用的存储过程名及参数情况,注意的是存储过程不可以有输出参数
CallableStatement proc = connection.prepareCall("{ call test_proc_mulresultset(?)}");
// 设置输入参数
proc.setInt(1, 11);
// 调入存储过程
proc.execute();
// 取出存储过程的结果集
boolean hasResult = true;
while (hasResult) {
rs = proc.getResultSet();
while(rs.next()) {
System.out.println("第一条记录第二个字段值为:"+rs.getString(2));
break;
}
hasResult = proc.getMoreResults();
}
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
// create proc test_proc_mulresultset
// @id int
// as
// select * from users where userid=@id
// select * from users order by userid desc
}
}
以上四个例子仅做参考.
相关推荐
总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...
以一个简单的例子展示Java调用存储过程: ```java import java.sql.*; public class CallProcedure { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...
本文将深入探讨如何使用Java与Oracle数据库进行交互,并调用存储过程。 首先,确保你已经在你的开发环境中安装了Oracle JDBC驱动,通常为ojdbc.jar。这个驱动允许Java应用程序连接到Oracle数据库并执行SQL语句以及...
### 二、使用CallableStatement调用存储过程 Java中的`CallableStatement`接口提供了对数据库存储过程的支持。下面将详细介绍如何使用`CallableStatement`来调用Oracle存储过程。 #### 1. 准备CallableStatement...
通过以上内容可以看出,Java调用存储过程不仅限于简单的输入输出参数,还可以涉及复杂的查询逻辑,甚至返回结果集或游标。这种灵活性使得Java开发人员能够在应用程序中更有效地利用数据库资源,提高数据处理效率。
通过以上示例可以看出,在Java中调用Oracle存储过程相对简单且直观。需要注意的是,正确地设置输入参数以及处理输出参数是非常关键的步骤。此外,在实际项目开发中,还需要考虑异常处理及资源释放等细节问题,以确保...
### Java连接SqlServer数据库调用存储过程详解 #### 一、引言 在现代软件开发过程中,Java作为一种广泛使用的编程语言,经常需要与各种数据库进行交互。其中,Microsoft SQL Server是一种非常流行的数据库管理系统...
### Ibatis调用存储过程详解 #### 一、引言 在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地...
本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库中创建一个存储过程。以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp ...
MyBatis作为一款流行的Java持久层框架,它提供了调用存储过程的功能,使得开发者能够方便地在Java应用中利用数据库的存储过程。下面将详细介绍如何在MyBatis中调用存储过程以及相关的知识点。 1. MyBatis概述 ...
接着使用`prepareCall`方法准备调用存储过程,并通过`setInt`和`setString`方法设置输入参数的值。最后通过`execute`方法执行存储过程。 #### 三、具有返回值的存储过程 ##### (一)创建具有返回值的存储过程 接...
在本压缩包中,"JAVA中最简单的分布式调用RMI共12页.pdf"可能是详细介绍了RMI的基础知识和实践应用。虽然无法直接查看文件内容,但我将根据RMI的一般概念和常见实践,为你提供一个全面的概述。 1. **RMI的概念**: ...
接下来,我们将讨论如何在Java中调用这个Oracle存储过程。Java提供了JDBC(Java Database Connectivity)API来与各种数据库进行交互,包括Oracle。以下是一个使用CallableStatement的例子: ```java import java....
最后,在Java代码中,通过ibatis的Session对象调用存储过程,传入必要的参数,处理返回的结果集。 ```java SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources....
总结,Java调用存储过程涉及到JDBC API的使用,理解存储过程的概念以及正确配置和使用`CallableStatement`对象是关键。通过熟练掌握这些知识点,开发者可以更高效地在Java应用中实现数据库操作。
在这个过程中,我们将了解到如何在SQL Server中创建存储过程,以及在Java环境中如何使用JDBC API来执行和获取存储过程的结果。 首先,我们需要理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以...
在我们的示例中,我们将使用 Java 应用程序调用 ODI webservice,执行一个简单的数据同步场景。我们将使用 MYEclipse 作为开发工具,ODI11.1.1.6 作为测试环境。 首先,我们需要创建一个 Java 项目,并添加对 ODI ...
标签“Java中调用存储过程”再次强调了主题的核心——在Java环境中调用存储过程的技术细节。这表明文章将专注于Java与数据库之间的集成技术,特别是关于如何使用Java标准库中的`java.sql`包来实现这一目标。 ### ...