java 調用 mysql存儲過程實例(轉)

這是我學習MySQL存儲過程中找到的,爲了以後別忘了,留念一下
原文地址:http://dev.firnow.com/course/3_program/java/javajs/200896/139314.html

import java.sql.*;

/**
iGoder
*/
public class ProcedureTest {
/*
表和存儲過程定義如下:
delimiter //

DROP TABLE if exists test //
CREATE TABLE test(
id int(11) NULL
) //

drop procedure if exists sp1 //

create procedure sp1(in p int)
comment 'insert into a int value'
begin
declare v1 int;
set v1 = p;
insert into test(id) values(v1);
end
//

drop procedure if exists sp2 //
create procedure sp2(out p int)
begin
select max(id) into p from test;
end
//

drop procedure if exists sp6 //
create procedure sp6()
begin
select * from test;
end//

*/

public static void main(String[] args) {
//callIn(111);
//callOut();
callResult();
}

/**
* 調用帶有輸入參數的存儲過程
* @param in stored procedure input parameter value
*/
public static void callIn(int in){
//獲取連接
Connection conn = ConnectDb.getConnection();
CallableStatement cs = null;
try {
//可以直接傳入參數
//cs = conn.prepareCall("{call sp1(1)}");

//也可以用問號代替
cs = conn.prepareCall("{call sp1(?)}");
//設置第一個輸入參數的值爲110
cs.setInt(1, in);

cs.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(cs != null){
cs.close();
}
if(conn != null){
conn.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}

}

/**
* 調用帶有輸出參數的存儲過程
*
*/
public static void callOut() {
Connection conn = ConnectDb.getConnection();
CallableStatement cs = null;
try {
cs = conn.prepareCall("{call sp2(?)}");
//第一個參數的類型爲Int
cs.registerOutParameter(1, Types.INTEGER);
cs.execute();

//得到第一個值
int i = cs.getInt(1);
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(cs != null){
cs.close();
}
if(conn != null){
conn.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

/**
* 調用輸出結果集的存儲過程
*/
public static void callResult(){
Connection conn = ConnectDb.getConnection();
CallableStatement cs = null;
ResultSet rs = null;
try {
cs = conn.prepareCall("{call sp6()}");
rs = cs.executeQuery();

//循環輸出結果
while(rs.next()){
System.out.println(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null){
rs.close();
}
if(cs != null){
cs.close();
}
if(conn != null){
conn.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

}


/**
*獲取數據庫連接的類
*/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

class ConnectDb {

public static Connection getConnection(){
Connection conn = null;
PreparedStatement preparedstatement = null;
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String dbname = "test";
String url ="jdbc:mysql://localhost/"+dbname+"?user=root&password=root&useUnicode=true&characterEncoding=8859_1" ;
conn= DriverManager.getConnection(url);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

}
發佈了18 篇原創文章 · 獲贊 0 · 訪問量 1241
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章