javamysql存儲過程調用存儲過程
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
/*
* 對應的存儲過程
DROP PROCEDURE IF EXISTS `pro_num_user`;
delimiter ;;
CREATE PROCEDURE `pro_num_user`(IN user_name varchar(10) ,OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) INTO count_num FROM tab_user WHERE 'name'=user_name;
END
;;
delimiter ;
*/
public class Test {
public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://127.0.0.1:3306/test";
public static final String USERNAME = "root";
public static final String PASSWORD = "acbee";
public static void main(String[] args) throws Exception {
test1();
test2();
}
public static void test1() throws Exception
{
Class.forName(DRIVER_CLASS);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "{CALL pro_num_user(?,?)}"; //調用存儲過程
CallableStatement cstm = connection.prepareCall(sql); //實例化對象cstm
cstm.setString(1, "myd"); //存儲過程輸入參數
//cstm.setInt(2, 2); // 存儲過程輸入參數
cstm.registerOutParameter(2, Types.INTEGER); // 設置返回值類型 即返回值
cstm.execute(); // 執行存儲過程
System.out.println(cstm.getInt(2));
cstm.close();
connection.close();
}
public static void test2() throws Exception
{
Class.forName(DRIVER_CLASS);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "{CALL pro_number(?,?,?)}"; //調用存儲過程
CallableStatement cstm = connection.prepareCall(sql); //實例化對象cstm
cstm.setInt(1, 2); // 存儲過程輸入參數
cstm.setInt(2, 2); // 存儲過程輸入參數
cstm.registerOutParameter(3, Types.INTEGER); // 設置返回值類型 即返回值
cstm.execute(); // 執行存儲過程
System.out.println(cstm.getInt(3));
cstm.close();
connection.close();
}
}
2. mysql 存儲過程怎麼調用
php調用mysql存儲過程和函數的方法
存儲過程和函數是MySql5.0剛剛引入的。關於這方面的操作在PHP裡面沒有直接的支持。但是由於Mysql PHP API的設計,使得我們可以在以前的PHP版本中的mysql php api中支持存儲過程和函數的調用。
在php中調用存儲過程和函數。
1。調用存儲過程的方法。
a。如果存儲過程有 IN/INOUT參數,聲明一個變數,輸入參數給存儲過程,該變數是一對,
一個php變數(也可以不必,只是沒有php變數時,沒有辦法進行動態輸入),一個Mysql
變數。
b。如果存儲過程有OUT變數,聲明一個Mysql變數。
mysql變數的聲明比較特殊,必須讓mysql伺服器知道此變數的存在,其實也就是執行一條mysql語句。
入set @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()執行mysql 變數聲明語句。
mysql_query("set @mysqlvar=$pbpvar");
這樣,在mysql伺服器裡面就有一個變數,@mysqlar。如果是IN參數,那麼其值可以由phpar傳入。
d。 如果是存儲過程。
1。執行 call procere()語句。
也就是mysql_query("call proceer([var1]...)");
2. 如果有返回值,執行select @ar,返回執行結果。
mysql_query("select @var)"
接下來的操作就和php執行一般的mysql語句一樣了。可以通過mydql_fetch_row()等函數獲得結果。
如果時函數。 直接執行 select function() 就可以了。
$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];
3. mysql里邊,存儲過程之間相互調用
你創建一個存儲過程C
先執行存儲過程A,並得到返回值
再判斷返回值執行存儲過程B
例如:
mysql>
\d
//
mysql>
create
procere
test(v_name
char(20),out
v_id
int)
->
BEGIN
->
SELECT
id
into
v_id
from
t1
WHERE
name=v_name;
->
END;
->
//
mysql>
create
procere
test1(v_id
int,out
v_name
char(20))
->
BEGIN
->
SELECT
name
into
v_name
from
t2
where
id=v_id;
->
END;
->
//
mysql>
create
procere
test2(inout
v_name
char(20))
->
BEGIN
->
DECLARE
v_id
int;
->
CALL
test(v_name,v_id);
->
CALL
test1(v_id,v_name);
->
END;
->
//
mysql>
set
@aa='xx『//
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
call
test2(@aa)
//
Query
OK,
0
rows
affected
(0.01
sec)
mysql>
select
@aa//
+------+
|
@aa
|
+------+
|
x2
|
+------+
1
row
in
set
(0.00
sec)
4. java裡面怎麼調用mysql的存儲過程的
java代碼:
Class.forName("com.mysql.jdbc.Driver");
Connectioncon=DriverManager
.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=111111");
Stringsql="{callsel(?)}";
CallableStatementcs=(CallableStatement)con.prepareCall(sql);
cs.execute();
Stringname=cs.getString(1);
System.out.println(name);
創建存儲過程代碼:
dropprocereifexistssel;
createproceresel(outname1varchar(225))
begin
;
end
輸出結果:
5. java 如何實現和調用 mysql存儲過程
java.sql 包中的Connection 和 CallableStatement就調用了
~~~~~~~~~~~~~~~~
6. 關於java調用mysql存儲過程,簡答的存儲過程
看看這例子是怎麼調用的是不是你寫錯了
http://www.kanyinqing.com/read/it/database/411328.html
7. 求助JAVA調用MYSQL存儲過程的問題
1.資料庫存儲過程:簡單滴說,存儲過程就是存儲在資料庫中的一個程序。
2..資料庫存儲過程作用:
第一:存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快
第二:存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因。
第三:存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程序運行。
第四:存儲過程主要是在伺服器上運行,減少對客戶機的壓力。
第五:存儲過程可以包含程序流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了數據邏輯。
第六:存儲過程可以在單個存儲過程中執行一系列 SQL 語句。
第七:存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
此外,如果多條SQL語句執行過程中,過程環節返回了數據作為後面環節的輸入數據,如果直接通過
SQL語句執行,勢必導致大量的數據通過網路返回到客戶機,並在客戶機運算;如果封裝在存儲過程中,
則將運算放在伺服器進行,不但減少了客戶機的壓力,同時也減少了網路流量,提高了執行的效率。
3.mysql存儲過程:
MySQL5存儲過程,用得人好像不多。按照資料庫設計原理來講,存儲過程是在db server上預編譯的,所以查詢速度會比較起純SQL語句快很多。可能是現在流行OO,導至存儲過程使用的餘地大打折扣。但如果從效果上來講,用存儲過程來實現業務規則所帶得DB SERVER壓力,比用JAVA類實現業務規則所帶來的WEB SERVER壓力要小。當然存儲過程也不應濫用,象普通的insert、update之類的語句就不需要使用存儲過程了。
MySQL創建procure的語法與sql server/Oracle差別較大。
例1:傳入參數的procere
create procere usp_test(param varchar(20)
select * from talbeName where column=param
例2:更新表的procere
create procere usp_test2 (t varchar(20))
begin
set xname = 'test';
update table set column = xname where column1=t;
end
MySQL創建存儲過程時不帶as,而且()不能省略,即便是沒有傳入參數。這一點象sql server或是oracle那樣直觀,而且聲明變數時直接用declare,不用加的@或@@(in out變數除外)。還有一點是很怪的語法,如果是以「select」為開頭的存儲過程,是不能加"begin end"的。"begin end"表示多條SQL語句的復合體。
當然,事實上幾乎沒有哪款資料庫是完全符合SQL3標準的,多少都含有自己的一些成份裡面,這也造成使用存儲過程會使程序的可移性降低。
調用procere
MySQL使用call關鍵字。例:call usp_test('test');而不是execute,同樣()是不能省略的。
創建完procere後,再看看java是如何調用procere的。
Connection conn = null;
CallableStatementcstmt=null;
ResultSetrs=null;
try{
conn=DbConn.getDbConn();//getpoolconn
CallableStatementcstmt=conn.prepareCall("{callusp_test(?)}");
call.setString(1,"test");
rs=call.executeQuery();
while(rs.next()){
Stringte=rs.getString(1);
System.out.println("te:"+te);
}
}catch(Exceptione){
System.out.println("e:"+e);
}finally{
try{
rs.close();
cstmt.close();
conn.close();
}catch(Exceptionex){
System.out.println("ex:"+ex);
}
}
這里使用的是"{call usp_test()}"來調用存儲過程。同時也可以編程傳入參數,進行查詢。
8. JAVA調用MySQL存儲過程
java代碼:
Class.forName("com.mysql.jdbc.Driver");
Connectioncon=DriverManager
.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=111111");
Stringsql="{callsel(?)}";
CallableStatementcs=(CallableStatement)con.prepareCall(sql);
cs.execute();
Stringname=cs.getString(1);
System.out.println(name);
創建存儲過程代碼:
dropprocereifexistssel;
createproceresel(outname1varchar(225))
begin
;
end
輸出結果:
9. 一個關於java調用mysql 存儲過程的問題
在存儲過程中如果有查詢結果集,在java中執行存儲過程後,應使用其父介面Statement的getResultSet()方法獲取查詢結果集,此方法就返回ResultSet,如你上面若想獲取存儲過程中查詢結果集應如下:
ResultSet rs = cst.getResultSet();
以下遍歷此rs即可... ...