MySql儲存過程中傳參和不傳參以及java中呼叫程式碼
阿新 • • 發佈:2018-11-09
資料庫表結構
1.mysql不傳參寫儲存過程
create procedure product() -- product為儲存過程名稱
begin
select * from book;
end
呼叫此儲存過程為
CALL product
2.有傳參的儲存過程
CREATE PROCEDURE updateInfo(
in b_new_name VARCHAR(100), -- 傳入的欄位型別為VARCHAR
in b_id BIGINT(20),
out b_result_name VARCHAR(100) -- 返回的欄位型別為VARCHAR
)
BEGIN
UPDATE book t SET t.NAME= b_new_name WHERE t.book_id= b_id;
SELECT b.`name` from book b WHERE b.book_id=b_id INTO b_result_name; -- into到傳入引數只有才可以在外部拿到值
End
3.使用java程式調帶引數和不帶引數的儲存過程
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;
public class Main {
public static void main(String[] args) {
// selectDateFromMysql(conn()); //連線資料庫
//unParamCall(); //執行無參儲存過程
paramCall(); //執行有引數儲存過程
}
/**
* 執行有引數儲存過程
*/
private static void paramCall() {
Connection con = null;
CallableStatement csm = null ;
ResultSet res = null;
try {
//建立一個一個數據庫連線
con = conn();
//執行儲存過程
csm = con.prepareCall("{ call updateInfo(?,?,?)}"); //傳入引數和輸出引數萬用字元,一種有三個引數
csm.setString(1, "語文"); //第一個引數為 字串型別 語文
csm.setInt(2,2); //第二個引數為整型,Index 為2
csm.registerOutParameter(3,Types.VARCHAR); //第三個引數為輸出結果,為資料庫表中列的型別,即資料庫的型別,Types類中有所有資料庫的常見型別
csm.execute();
System.out.println(csm.getString(3)); //輸入執行的第三個引數,為結果引數,打印出來
csm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 執行無參儲存過程
*/
private static void unParamCall() {
Connection con = null;
CallableStatement csm = null;
ResultSet res = null;
Book b = new Book();
try {
//建立一個一個數據庫連線
con = conn();
//執行儲存過程
csm = con.prepareCall("{ call product()}"); //儲存過程和查資料區別在這裡
res = csm.executeQuery();
while (res.next()) {
b.setId(res.getInt(1));
b.setName(res.getString("name"));
b.setNumber(res.getInt(3));
b.setDetail(res.getString(4));
System.out.println(b.toString());
}
res.close();
csm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
/**
* 執行資料庫連線和簡單查詢
*/
private void selectDateFromMysql(Connection con) {
Statement stm = null;
String sql = null;
ResultSet res = null;
Book b = new Book();
try {
stm = con.createStatement();
sql = "select * from book";
res = stm.executeQuery(sql);
while (res.next()) {
int id = res.getInt("book_id");
b.setId(id);
String name2 = res.getString("name");
b.setName(name2);
int number = res.getInt(3);
b.setNumber(number);
String detail = res.getString(4);
b.setDetail(detail);
System.out.println(b.toString());
}
res.close();
stm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 建一個數據庫連線
*
* @return
*/
private static Connection conn() {
String sql = null;
String name = "root";
String pass = "123456";
String url = "jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8";
Connection con = null;
try {
System.out.println("開始進行登陸操作*************");
con = DriverManager.getConnection(url, name, pass);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
}