JAVA呼び出しデータベースストレージプロセス
16381 ワード
次に、ORACLEデータベース・ストレージ・プロシージャに対するJAVAの呼び出しを示します.
ConnUtils接続ツールクラス:接続の取得、リソースの解放
参照付きストアド・プロシージャ・コードを作成するには、次の手順に従います.
Javaを使用してパラメータ付きストレージ・プロシージャを呼び出す
アクセス許可付きストアド・プロシージャ・コードの作成
JAVAを使用して帯域出入り参照ストレージ・プロシージャを呼び出す
ConnUtils接続ツールクラス:接続の取得、リソースの解放
package
com.ljq.test;
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
java.sql.Statement;
/**
*
*
* ConnUtils final
*
*
@author
jiqinlin
*
*/
public
final
class
ConnUtils {
private
static
String url
=
"
jdbc:oracle:thin:@localhost:1521:orcl
"
;
private
static
String user
=
"
test
"
;
private
static
String password
=
"
test
"
;
/**
* static
*/
private
ConnUtils() {
}
//
( )
static
{
try
{
Class.forName(
"
oracle.jdbc.driver.OracleDriver
"
);
}
catch
(ClassNotFoundException e) {
throw
new
ExceptionInInitializerError(e);
}
}
/**
* Connection
*
*
@return
*
@throws
SQLException
*/
public
static
Connection getConnection()
throws
SQLException {
return
DriverManager.getConnection(url, user, password);
}
/**
*
*
*
@param
rs
*
@param
st
*
@param
conn
*/
public
static
void
free(ResultSet rs, Statement st, Connection conn) {
try
{
if
(rs
!=
null
)
rs.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
finally
{
try
{
if
(st
!=
null
)
st.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
finally
{
if
(conn
!=
null
)
try
{
conn.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
}
}
}
参照付きストアド・プロシージャ・コードを作成するには、次の手順に従います.
--
CREATE
OR
REPLACE
PROCEDURE
stu_proc(v_name OUT
VARCHAR2
)
AS
BEGIN
SELECT
o.sname
INTO
v_name
FROM
student o
where
o.id
=
2
;
END
;
Javaを使用してパラメータ付きストレージ・プロシージャを呼び出す
package
com.ljq.test;
import
java.sql.CallableStatement;
import
java.sql.Connection;
import
java.sql.SQLException;
import
java.sql.Types;
public
class
ProceTest {
public
static
void
main(String[] args)
throws
Exception {
Connection conn
=
null
;
CallableStatement statement
=
null
;
String sql
=
"
{call stu_proc(?)}
"
;
try
{
conn
=
ConnUtils.getConnection();
statement
=
conn.prepareCall(sql);
statement.registerOutParameter(
1
, Types.VARCHAR);
statement.executeUpdate();
//
:lisi
String sname
=
statement.getString(
1
);
System.out.println(sname);
}
catch
(SQLException e) {
e.printStackTrace();
}
finally
{
ConnUtils.free(
null
, statement, conn);
}
}
}
アクセス許可付きストアド・プロシージャ・コードの作成
--
CREATE OR REPLACE PROCEDURE stu_proc(v_id IN NUMBER, v_name OUT VARCHAR2) AS
BEGIN
SELECT o.sname INTO v_name FROM student o where o.id
=
v_id;
END;
JAVAを使用して帯域出入り参照ストレージ・プロシージャを呼び出す
package
com.ljq.test;
import
java.sql.CallableStatement;
import
java.sql.Connection;
import
java.sql.SQLException;
import
java.sql.Types;
public
class
ProceTest {
public
static
void
main(String[] args)
throws
Exception {
Connection conn
=
null
;
CallableStatement statement
=
null
;
String sql
=
"
{call stu_proc(?, ?)}
"
;
try
{
conn
=
ConnUtils.getConnection();
statement
=
conn.prepareCall(sql);
statement.setInt(
1
,
1
);
statement.registerOutParameter(
2
, Types.VARCHAR);
statement.executeUpdate();
//
:zhangsan
String sname
=
statement.getString(
2
);
System.out.println(sname);
}
catch
(SQLException e) {
e.printStackTrace();
}
finally
{
ConnUtils.free(
null
, statement, conn);
}
}
}