/**
数据库表
CREATE TABLE TB_MONITOR (
ID NUMBER(20) NOT NULL,
MONITOR_OBJECT_CODE CHAR(10),
MONITOR_OBJECT_NAME VARCHAR2(180),
BRANCH_CODE CHAR(10),
SYSTEM_CODE CHAR(10),
DIREC_NAME VARCHAR2(180),
FILE_NUM NUMBER,
STATUS CHAR(10),
BEGIN_TIME TIMESTAMP,
END_TIME TIMESTAMP,
DATA_TIME TIMESTAMP,
MONITOR_TIME TIMESTAMP,
REMARK VARCHAR2(180),
CONSTRAINT PK_TB_MONITOR PRIMARY KEY (ID)
);
*/
public class OracleProcedureCall {
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String strUrl = "jdbc:oracle:thin:@192.168.1.90:1521:odsdb";
private static String userName = "odsdb";
private static String password = "ods";
private static Connection conn = null;
//获得数据库连接
public static Connection getConnection(){
try{
if(conn == null){
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, userName, password);
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
/*无返回值的存储过程
CREATE OR REPLACE PROCEDURE AddMonInfo
(
n_id tb_monitor.id%TYPE,
n_oc tb_monitor.monitor_object_code%TYPE,
n_on tb_monitor.monitor_object_name%TYPE,
n_bc tb_monitor.branch_code%TYPE,
n_sc tb_monitor.system_code%TYPE,
n_fn tb_monitor.file_num%TYPE,
n_st tb_monitor.status%TYPE,
n_rk tb_monitor.remark%TYPE
)
AS
BEGIN
--向表中插入数据
INSERT INTO tb_monitor(id,monitor_object_code,monitor_object_name,branch_code,system_code,file_num,status,remark)
VALUES(n_id,n_oc,n_on,n_bc,n_sc,n_fn,n_st,n_rk);
END AddMonInfo;
*/
public void testInsert(){
try {
CallableStatement proc = getConnection().prepareCall("{ call odsdb.AddMonInfo(?,?,?,?,?,?,?,?) }");
proc.setString(1, "100");
proc.setString(2, "o_code");
proc.setString(3, "o_name");
proc.setString(4, "b_code");
proc.setString(5, "s_code");
proc.setString(6, "1");
proc.setString(7, "status");
proc.setString(8, "remark");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(conn!=null){
conn.close();
}
}
catch (SQLException ex1) {
}
}
}
/*有返回值的存储过程(非列表)
CREATE OR REPLACE PROCEDURE QueryMonInfo
(
n_id IN tb_monitor.id%TYPE,
n_oc OUT VARCHAR2,
n_on OUT VARCHAR2
) AS
BEGIN
SELECT monitor_object_code, monitor_object_name into n_oc,n_on FROM tb_monitor WHERE ID= n_id;
END QueryMonInfo;
*/
public String[] testQueryArray(){
String[] resultArr = null;
try {
CallableStatement proc = getConnection().prepareCall("{ call odsdb.QueryMonInfo(?,?,?) }");
proc.setInt(1, 100);
proc.registerOutParameter(2, Types.VARCHAR);
proc.registerOutParameter(3, Types.VARCHAR);
proc.execute();
resultArr = new String[2];
resultArr[0] = proc.getString(2);
resultArr[1] = proc.getString(3);
System.out.println("=code=is= "+resultArr[0]);
System.out.println("=name=is= "+resultArr[1]);
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(conn!=null){
conn.close();
}
}
catch (SQLException ex1) {
ex1.printStackTrace();
}
}
return resultArr;
}
/*返回列表,需要使用package方式
先创建Package
CREATE OR REPLACE PACKAGE TESTPACKAGE AS TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
然后创建procedure
CREATE OR REPLACE PROCEDURE QueryMonResultSet(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
OPEN p_CURSOR FOR SELECT * FROM tb_monitor;
END QueryMonResultSet;
*/
public ResultSet testQueryResultSet(){
ResultSet rs = null;
try {
CallableStatement proc = getConnection().prepareCall("{ call odsdb.QueryMonResultSet(?) }");
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
rs = (ResultSet)proc.getObject(1);
while(rs.next()) {
System.out.println("ID:" + rs.getString(1) + "\tCODE:"+rs.getString(2)+"");
}
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
return rs;
}
public static void main(String[] args){
OracleProcedureCall call = new OracleProcedureCall();
call.testQueryResultSet();
}
}
//----2222222222222222------------------------------------------------------------------------------------------------------------------
import java.sql.*;
public class n {
public static void main(String args [])
{
Connection myConnection = null; //与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果
Statement myStatement = null; //用于执行静态 SQL 语句并返回它所生成结果的对象
CallableStatement cs;
try
{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); //管理一组 JDBC 驱动程序的基本服务并向 DriverManager 注册给定驱动程序
myConnection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "hr", "hr"); // 试图建立到给定数据库 URL 的连接
//myConnection.setAutoCommit(false); //将此连接的自动提交模式设置为给定状态
cs = myConnection.prepareCall("{call sencond(?)}");
cs.registerOutParameter(1, Types.VARCHAR);
//cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
String retValue = cs.getString(1);
System.out.println(retValue);
}
catch(SQLException e)
{
System.out.println("Error code = " + e.getErrorCode());
System.out.println("Error message = " + e.getMessage());
System.out.println("Error state = " + e.getSQLState());
}
finally
{
try
{
if (myStatement != null)
{
myStatement.close(); //立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作
}
if (myConnection != null)
{
myConnection.close(); //立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放
}
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
}
核心部分:
CallableStatement cs;
cs = myConnection.prepareCall("{call sencond(?,?)}");
cs.registerOutParameter(1, Types.VARCHAR); //out
cs.setString(2, "a string"); //in
cs.execute(); //run
String retValue = cs.getString(1);
System.out.println(retValue);
过程如下:
create or replace procedure
sencond(name out varchar2,search in varchar2)
as
begin
select name from emp where name=search;
end;
分享到:
相关推荐
Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中,需要创建两个Type类型:`myScalarType`和`myTableType...
### JAVA调用ORACLE存储过程知识点详解 #### 一、背景与概述 在现代软件开发过程中,集成多种技术栈是常态。特别是在企业级应用中,Java 和 Oracle 数据库的组合非常常见。通过 Java 调用 Oracle 存储过程不仅能够...
以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。
总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
### Java调用Oracle存储过程详解 #### 一、概述 在企业级应用开发中,数据库存储过程被广泛用于实现复杂的业务逻辑处理。由于其高效性和安全性,存储过程常常成为首选方案之一。Java作为主流的企业级开发语言之一...
在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity),这是Java标准库提供的一组接口和类,用于与各种数据库进行通信。首先,我们需要添加Oracle JDBC驱动到项目中,例如ojdbc.jar。 1. *...
总之,Java调用Oracle存储过程,尤其是处理游标,需要理解JDBC的使用、Oracle特定的类型以及存储过程的参数传递方式。通过合理的编程实践,我们可以高效地在Java应用程序中集成Oracle数据库的复杂操作。
以上代码展示了如何在Java中调用Oracle数据库的三种类型的存储过程:无返回值的存储过程、有单个返回值的存储过程以及返回列表的存储过程。对于无返回值的存储过程,主要涉及的是参数的输入,通过`execute()`方法...
总之,Java调用Oracle存储过程涉及的主要知识点包括JDBC API、Oracle JDBC驱动、`CallableStatement`对象、参数绑定、结果集处理以及资源管理。通过学习和实践这些内容,开发者可以有效地在Java应用中集成Oracle...
java调用oracle存储过程.wps java调用oracle存储过程.wps java调用oracle存储过程.wps
### JAVA调用ORACLE存储过程通用类 #### 概述 在Java开发中,经常会遇到需要与数据库交互的情况,特别是当涉及到复杂的业务逻辑时,利用数据库的存储过程可以有效地提高程序性能并简化代码结构。本篇文章将详细...
本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...
在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与...记住,实践是最好的老师,尝试编写一个简单的Java程序来调用Oracle存储过程,加深理解。
通过这些步骤,你可以成功地从Java应用程序中调用Oracle存储过程。确保正确配置JDBC驱动,理解存储过程的参数类型,并熟悉JDBC API,这样就能高效地实现数据交互了。在开发过程中,可以参考Oracle的官方文档以及各种...
总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....
我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...