java調(diào)用mysql存儲(chǔ)過(guò)程實(shí)例分析
本文實(shí)例講述了java調(diào)用mysql存儲(chǔ)過(guò)程的方法。分享給大家供大家參考。具體如下:
數(shù)據(jù)庫(kù)的測(cè)試代碼如下 :
1、新建表test
create table test( field1 int not null ) TYPE=MyISAM ; insert into test(field1) values(1);
2、刪除已存在的存儲(chǔ)過(guò)程:
-- 刪除儲(chǔ)存過(guò)程 delimiter // -- 定義結(jié)束符號(hào) drop procedure p_test;
3、mysql存儲(chǔ)過(guò)程定義:
create procedure p_test() begin declare temp int; set temp = 0; update test set field1 = values(temp); end
4、調(diào)用方法:
CallableStatement cStmt = conn.prepareCall("{call p_test()}");
cStmt.executeUpdate();
import java.sql.*;
/**
iGoder
*/
public class ProcedureTest {
/*
表和存儲(chǔ)過(guò)程定義如下:
delimiter //
DROP TABLE if exists test //
CREATE TABLE test(
id int(11) NULL
) //
drop procedure if existssp1 //
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();
}
/**
* 調(diào)用帶有輸入?yún)?shù)的存儲(chǔ)過(guò)程
* @param in stored procedure input parametervalue
*/
public static void callIn(int in){
//獲取連接
Connection conn = ConnectDb.getConnection();
CallableStatement cs = null;
try {
//可以直接傳入?yún)?shù)
//cs = conn.prepareCall("{call sp1(1)}");
//也可以用問(wèn)號(hào)代替
cs = conn.prepareCall("{call sp1(?)}");
//設(shè)置第一個(gè)輸入?yún)?shù)的值為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();
}
}
}
/**
* 調(diào)用帶有輸出參數(shù)的存儲(chǔ)過(guò)程
*
*/
public static void callOut() {
Connection conn = ConnectDb.getConnection();
CallableStatement cs = null;
try {
cs = conn.prepareCall("{call sp2(?)}");
//第一個(gè)參數(shù)的類型為Int
cs.registerOutParameter(1, Types.INTEGER);
cs.execute();
//得到第一個(gè)值
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();
}
}
}
/**
* 調(diào)用輸出結(jié)果集的存儲(chǔ)過(guò)程
*/
public static void callResult(){
Connection conn = ConnectDb.getConnection();
CallableStatement cs = null;
ResultSet rs = null;
try {
cs = conn.prepareCall("{call sp6()}");
rs = cs.executeQuery();
//循環(huán)輸出結(jié)果
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();
}
}
}
}
/**
*獲取數(shù)據(jù)庫(kù)連接的類
*/
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;
}
}
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
- Java Spring動(dòng)態(tài)生成Mysql存儲(chǔ)過(guò)程詳解
- 詳解java調(diào)用存儲(chǔ)過(guò)程并封裝成map
- MyBatis創(chuàng)建存儲(chǔ)過(guò)程的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java調(diào)用Oracle存儲(chǔ)過(guò)程詳解
- Java實(shí)現(xiàn)調(diào)用MySQL存儲(chǔ)過(guò)程詳解
- 詳解Java的JDBC API的存儲(chǔ)過(guò)程與SQL轉(zhuǎn)義語(yǔ)法的使用
- java編程調(diào)用存儲(chǔ)過(guò)程中得到新增記錄id號(hào)的實(shí)現(xiàn)方法
- Java調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法
- Java中調(diào)用SQL Server存儲(chǔ)過(guò)程詳解
- java調(diào)用oracle分頁(yè)存儲(chǔ)過(guò)程示例
- java調(diào)用Oracle存儲(chǔ)過(guò)程的方法實(shí)例
- Java下使用Oracle存儲(chǔ)過(guò)程(詳解)
- Java存儲(chǔ)過(guò)程調(diào)用CallableStatement的方法
相關(guān)文章
Java的動(dòng)態(tài)代理模式之Cglib代理詳解
這篇文章主要介紹了Java的動(dòng)態(tài)代理模式之Cglib代理詳解,Cglib代理也叫作?子類代理,它是在內(nèi)存中構(gòu)建一個(gè)子類對(duì)象從而實(shí)現(xiàn)對(duì)目標(biāo)對(duì)象功能擴(kuò)展,?有些書(shū)也將Cglib代理歸屬到動(dòng)態(tài)代理,需要的朋友可以參考下2023-11-11
Springboot錯(cuò)誤頁(yè)面和錯(cuò)誤信息定制操作
這篇文章主要介紹了Springboot錯(cuò)誤頁(yè)面和錯(cuò)誤信息定制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼
這篇文章主要介紹了Java 數(shù)據(jù)類型及類型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼,需要的朋友可以參考下2020-10-10
Java中Comparator與Comparable排序的區(qū)別詳解
這篇文章主要介紹了Java中Comparator與Comparable排序的區(qū)別詳解,如果你有一個(gè)類,希望支持同類型的自定義比較策略,可以實(shí)現(xiàn)接口Comparable,如果某個(gè)類,沒(méi)有實(shí)現(xiàn)Comparable,但是又希望對(duì)它進(jìn)行比較,則可以自定義一個(gè)Comparator,需要的朋友可以參考下2024-01-01

