一、簡(jiǎn)介
與調(diào)用mysql存儲(chǔ)過程類型過程都是如下
1、創(chuàng)建連接?Connection conn = DriverManager.getConnection(url, user, password);
2、創(chuàng)建CallableStatement?CallableStatement statement = conn.prepareCall(sql);
3、設(shè)置參數(shù)
statement.setInt(1, id);
statement.registerOutParameter(2, Types.VARCHAR);
statement.registerOutParameter(3, Types.INTEGER);
statement.registerOutParameter(4, Types.VARCHAR);
? 4、執(zhí)行
statement.execute(); 或?statement.executeUpdate();
5、獲取返回
int age = statement.getInt(3);
只是oracle存儲(chǔ)過程有的結(jié)果集是以游標(biāo)的方式返回,此時(shí)我們需要調(diào)用ResultSet rs = (ResultSet) statement.getObject(1);方法回去結(jié)果集
二、代碼
以下存儲(chǔ)過程表結(jié)構(gòu)如下:
DROP
TABLE
person ;
CREATE
TABLE
person (
id
NUMBER
(
11
)
NOT
NULL
,
username
VARCHAR2
(
255
)
NULL
,
age
NUMBER
(
11
)
NULL
,
password
VARCHAR2
(
255
)
NULL
,
PRIMARY
KEY
(id)
)
1、查詢所有記錄
存儲(chǔ)過程代碼如下:
create
or
replace
procedure
pro_person_findall(
p_cursor out pkg_const.r_cursor
)
is
begin
open
p_cursor
for
select
*
from
person;
exception
when
others
then
DBMS_OUTPUT.PUT_LINE(
'
獲取信息發(fā)生錯(cuò)誤
'
);
end
pro_person_findall;
調(diào)用代碼如下
public
static
void
findAll() {
String driver
= "oracle.jdbc.driver.OracleDriver"
;
String url
= "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"
;
String user
= "wuxx"
;
String password
= "wuxx"
;
try
{
Class.forName(driver);
Connection conn
=
DriverManager.getConnection(url, user, password);
String sql
= "{call pro_person_findall2(?)}"
;
CallableStatement statement
=
conn.prepareCall(sql);
statement.registerOutParameter(
1
, oracle.jdbc.OracleTypes.CURSOR);
statement.execute();
ResultSet rs
= (ResultSet) statement.getObject(1
);
ResultSetMetaData rmd
=
rs.getMetaData();
System.out.print(rmd.getColumnName(
1) + " "
);
System.out.print(rmd.getColumnName(
2) + " "
);
System.out.print(rmd.getColumnName(
3) + " "
);
System.out.print(rmd.getColumnName(
4) + "\n"
);
while
(rs.next()) {
System.out.print(rs.getInt(
"id") + " "
);
System.out.print(rs.getString(
"username") + " "
);
System.out.print(rs.getInt(
"age") + " "
);
System.out.print(rs.getString(
"password") + " \n"
);
}
}
catch
(ClassNotFoundException e) {
e.printStackTrace();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
2、查詢一條記錄
存儲(chǔ)過程如下
CREATE
OR
REPLACE
PROCEDURE
PRO_PERSON_FINDBYID(
v_id
IN
NUMBER
,
v_username OUT
VARCHAR2
,
v_age OUT
NUMBER
,
v_password OUT
VARCHAR2
,
p_count out
number
)
AS
BEGIN
SELECT
username, age, password
INTO
v_username, v_age, v_password
from
person
where
id
=
v_id;
p_count :
=
1
;
exception
when
others
then
p_count :
=
0
;
END
;
調(diào)用代碼如下:
public
static
void
find(Integer id) {
String driver
= "oracle.jdbc.driver.OracleDriver"
;
String url
= "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"
;
String user
= "wuxx"
;
String password
= "wuxx"
;
try
{
Class.forName(driver);
Connection conn
=
DriverManager.getConnection(url, user, password);
String sql
= "{call PRO_PERSON_FINDBYID(?,?,?,?,?)}"
;
CallableStatement statement
=
conn.prepareCall(sql);
BigDecimal rid
=
new
BigDecimal(id);
statement.setInt(
1
, id);
statement.registerOutParameter(
2
, oracle.jdbc.OracleTypes.VARCHAR);
statement.registerOutParameter(
3
, oracle.jdbc.OracleTypes.NUMBER);
;
//
statement.registerOutParameter(4
, oracle.jdbc.OracleTypes.VARCHAR);
statement.registerOutParameter(
5
, oracle.jdbc.OracleTypes.NUMBER);
statement.execute();
int
flag = statement.getInt(5
);
if
(flag != 0
)
System.out.println(statement.getString(
2) + " "
+ statement.getInt(3) + " " + statement.getString(4
));
else
System.out.println(
"data not found!"
);
}
catch
(ClassNotFoundException e) {
e.printStackTrace();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
3、增加記錄
存儲(chǔ)過程代碼如下:
create
or
replace
procedure
pro_person_insert(
p_id
number
,
p_username
varchar2
,
p_age
number
,
p_password
varchar2
,
p_count out
number
)
is
begin
insert
into
person (id, username, age, password)
values
(p_id, p_username, p_age, p_password);
p_count :
=
SQL
%
ROWCOUNT
;
--
SQL%ROWCOUNT為 隱士游標(biāo)的屬性
commit
;
exception
when
others
then
p_count :
=
0
;
end
pro_person_insert;
調(diào)用代碼如下:
public
static
void
add(Integer id, String username,
int
age,
String u_password) {
String driver
= "oracle.jdbc.driver.OracleDriver"
;
String url
= "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"
;
String user
= "wuxx"
;
String password
= "wuxx"
;
try
{
Class.forName(driver);
Connection conn
=
DriverManager.getConnection(url, user, password);
String sql
= "{call pro_person_insert(?,?,?,?,?)}"
;
CallableStatement statement
=
conn.prepareCall(sql);
statement.setInt(
1
, id);
statement.setString(
2
, username);
statement.setInt(
3
, id);
statement.setString(
4
, u_password);
statement.registerOutParameter(
5, oracle.jdbc.OracleTypes.NUMBER);
//
增加記錄是否成功的標(biāo)記,1 成功,0失敗
statement.execute();
System.out.println(statement.getInt(
5
));
}
catch
(ClassNotFoundException e) {
e.printStackTrace();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
4、更新記錄
存儲(chǔ)過程代碼如下:
create
or
replace
procedure
pro_person_update(
p_id
number
,
p_age
number
,
p_password
varchar2
,
p_count out
number
)
is
begin
update
person
set
age
=
p_age, password
=
p_password
where
id
=
p_id;
p_count :
=
SQL
%
ROWCOUNT
;
commit
;
exception
when
no_data_found
then
p_count :
=
0
;
when
others
then
p_count :
=
-
1
;
end
pro_person_update;
調(diào)用代碼如下:
public
static
void
update(Integer id,
int
age, String u_password) {
String driver
= "oracle.jdbc.driver.OracleDriver"
;
String url
= "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"
;
String user
= "wuxx"
;
String password
= "wuxx"
;
try
{
Class.forName(driver);
Connection conn
=
DriverManager.getConnection(url, user, password);
String sql
= "{call pro_person_update(?,?,?,?)}"
;
CallableStatement statement
=
conn.prepareCall(sql);
statement.setInt(
1
, id);
statement.setInt(
2
, age);
statement.setString(
3
, u_password);
statement.registerOutParameter(
4, oracle.jdbc.OracleTypes.NUMBER);
//
增加記錄是否成功的標(biāo)記
statement.execute();
System.out.println(statement.getInt(
4
));
}
catch
(ClassNotFoundException e) {
e.printStackTrace();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
5、刪除記錄
存儲(chǔ)過程代碼如下:
create
or
replace
procedure
pro_person_delete(
p_id
number
,
p_count out
number
)
is
begin
delete
from
person
where
id
=
p_id;
p_count :
=
SQL
%
ROWCOUNT
;
commit
;
exception
when
no_data_found
then
p_count :
=
0
;
when
others
then
p_count :
=
-
1
;
end
pro_person_delete;
調(diào)用代碼如下:
public
static
void
delete(Integer id) {
String driver
= "oracle.jdbc.driver.OracleDriver"
;
String url
= "jdbc:oracle:thin:@127.0.0.1:1521:wuxx"
;
String user
= "wuxx"
;
String password
= "wuxx"
;
try
{
Class.forName(driver);
Connection conn
=
DriverManager.getConnection(url, user, password);
String sql
= "{call pro_person_delete(?,?)}"
;
CallableStatement statement
=
conn.prepareCall(sql);
statement.setInt(
1
, id);
statement.registerOutParameter(
2, oracle.jdbc.OracleTypes.NUMBER);
//
增加記錄是否成功的標(biāo)記
statement.execute();
System.out.println(statement.getInt(
2
));
}
catch
(ClassNotFoundException e) {
e.printStackTrace();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

