oracle(42)_PL/SQL_Java 代码调用存储过程和存储函数

PL/SQL

Java 代码调用存储过程和函数

注意:本节的存储函数和存储过程是上两节已经建好的

Oracle 驱动下载,提取码:k53w 。
注意:版本必须一致,否则无法使用
oracle(42)_PL/SQL_Java 代码调用存储过程和存储函数
● 使用 eclipse 新建一个 Java 工程,然后将上面提供的连接数据库 oracle 的驱动文件直接拷贝到 src 下,之后再都添加到构建路径(build path)中,如图:
oracle(42)_PL/SQL_Java 代码调用存储过程和存储函数
● 建包建类
oracle(42)_PL/SQL_Java 代码调用存储过程和存储函数
oracle(42)_PL/SQL_Java 代码调用存储过程和存储函数

● 以上操作完整源码:

package cn.itcast.pro;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import oracle.jdbc.OracleTypes;

public class TestProFun
{
	public static void main(String[] args)
	{
		testPro();
		//testFun();
	}

	/**
	 * 存储过程调用
	 */
	public static void testPro()
	{
		String driver = "oracle.jdbc.OracleDriver";
		String connStr = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		Connection conn = null;
		CallableStatement cs = null;
		try
		{
			Class.forName(driver);
			conn = DriverManager.getConnection(connStr, "scott", "tiger");
			// 获得CallableStatement对象, 调用的sql :{call countysal(?,?)}
			cs = conn.prepareCall("{call countysal(?,?)}");
			//第一个问号表示输入参数,第二个表示输出参数
			cs.setInt(1, 7369);
			// 注册Oracle的输出参数的类型
			cs.registerOutParameter(2, OracleTypes.NUMBER);
			// 执行存储过程
			cs.execute();
			// 获得返回值
			int ysal = cs.getInt(2);
			System.out.println(ysal);
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			try
			{

				if (cs != null)
				{
					cs.close();
				}
				if (conn != null)
				{
					conn.close();
				}

			} catch (SQLException e)
			{
				e.printStackTrace();
			}

		}

	}

	/**
	 * 存储函数调用
	 */
	public static void testFun()
	{
		String driver = "oracle.jdbc.OracleDriver";
		String connStr = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		Connection conn = null;
		CallableStatement cs = null;
		try
		{
			Class.forName(driver);
			conn = DriverManager.getConnection(connStr, "scott", "tiger");
			// 获得CallableStatement对象, 调用的sql :{? = call countysal(?)}
			cs = conn.prepareCall("{? = call countysalf(?)}");
			cs.setInt(2, 7369);
			// 注册Oracle的输出参数的类型
			cs.registerOutParameter(1, OracleTypes.NUMBER);
			// 执行存储过程
			cs.execute();
			// 获得返回值
			int ysal = cs.getInt(1);
			System.out.println(ysal);
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			try
			{
				if (cs != null)
				{
					cs.close();
				}
				if (conn != null)
				{
					conn.close();
				}

			} catch (SQLException e)
			{
				e.printStackTrace();
			}
		}
	}
}

如有错误,欢饮指正!