怎样调用oracle存储过程,怎样在java代码中调用Oracle的存储过程

首先必须新建一张表:TEST(此过程用到Oracle sql developer 向导建表的)

CREATE TABLE "SCOTT"."TEST"   (

"TID" NUMBER(*,0) NOT NULL ENABLE,

"TNAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,

/*前两行看不懂,我建议你不要往下看了*/

CONSTRAINT "TANYANGTEST_PK" PRIMARY KEY ("TID")    --设TID为主键

USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

TABLESPACE "USERS"  ENABLE

) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

TABLESPACE "USERS" ;

CREATE OR REPLACE TRIGGER "SCOTT"."TANYANG_TRG"  --添加触发器,设主键为自增长

before insert on tanyangtest

for each row

BEGIN

SELECT TANYANGTEST_SEQ.NEXTVAL INTO :NEW.TID FROM DUAL;

END;

/

ALTER TRIGGER "SCOTT"."TANYANG_TRG" ENABLE;

1.下面建立名为PRO_INSERTEST存储过程:

create or replace procedure PRO_INSERTEST

( t_tname in varchar2

) as

begin

insert into TEST(tname) values(t_tname);

COMMIT;

end PRO_INSERTEST;

下面先测试,测试的值为:  T_TNAME := '我的名字叫java';

DECLARE

TNAME VARCHAR2(200);

BEGIN

T_TNAME := '我的名字叫java';

TEST(

TNAME => T_TNAME

);

END;

由于主键是自增长的,在这不必声明变量,但在写insert 语句时必须写清楚要插入的字段名,否则就会按照偶序列增长。

这时会在test表中产生一条新的记录。

首先将驱动加到lib中

然后我们在来看java的代码:

package com.ty.test;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class BaseConn {

public static void main(String[] args) {

// 连接驱动

private static final String DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";

// 连接字符串

private static final String DATABADE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";//此处为连接的数据库名称

// 用户名

private static final String DATABASE_USER = "scott";

// 用户密码

private static final String DATABASE_PASSWORD = "123";

private static Connection conn = null;

private static CallableStatement cstmt=null;

try {

Class.forName(DRIVER_CLASS).newInstance();

} catch (Exception e) {

System.out.println("注册驱动异常!");

e.printStackTrace();

}

try {

conn = DriverManager.getConnection(DATABADE_URL, DATABASE_USER,DATABASE_PASSWORD);

} catch (SQLException e) {

System.out.println("连接数据库驱动异常!");

e.printStackTrace();

}

if(conn!=null){

System.out.println("连接成功");

}else{

System.out.println("连接失败");

}

String sql="{call PRO_INSERTEST(?)}";

try {

cstmt = conn.prepareCall(sql)

cstmt.setString(1,'我是一条新的数据!');//此处必须对应存储过程中的变量的类型

cstmt.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

2..再建立名为PRO_UPDATETEST存储过程:

create or replace PROCEDURE PRO_UPDATETEST

( T_TID IN NUMBER

, T_TNAME IN VARCHAR2

) AS

BEGIN

UPDATE TEST SET tname= t_tname WHERE tid= t_tid;

COMMIT;

END PRO_UPDATE;

然后测试:刚才已经向test添加了两条记录,现在修改第一条记录

DECLARE

T_TID NUMBER;

T_TNAME VARCHAR2(200);

BEGIN

T_TID := 1;

T_TNAME := '我是被修改的记录';

PRO_UPDATE(

T_TID => T_TID,

T_TNAME => T_TNAME

);

END;

上面的java代码已经给出了连接数据库的方法,在这只需修改sql语句,然后设置参数:

String sql="{call PRO_UPDATETEST(?,?)}";

cstmt.setInt(1,2);//修改第二条记录

cstmt.setString(2,'我是被修改的第二条记录!');

cstmt.executeUpdate();

然后编译代码,查看数据库中是否修改记录了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值