首先必须新建一张表: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();
然后编译代码,查看数据库中是否修改记录了?