java調mysql存儲過程
書上說的太滑埋備復雜了而且不易理解,樓上的復制粘貼的我看不懂估計你更看不懂,我就簡單說吧:
比如我們要執行mysql中的student表,執行一條查詢語句select * from student
java中寫一個實體類student,包液胡含所有student表中的所有屬性,如name,age,score等
選擇jdbc的資料庫溝通方式,建立connection,paredstatement;
connection中寫資料庫名,driver名,用戶名,密碼;
建立String類型sqlStr中寫入sql語句select * from student ,
調用parestatement的query方法將sqlStr作為參數傳過去;就好了;
query方法會返回一個resultSet類型信毀的結果集,拿到它就成功了;
2. java 怎麼調用mysql 存儲過程
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();
}
}
3. java語言調用mysql存儲過程(需要獲取到存儲過程中的out 變數),
用getObject方法
getObjectObject getObject(int parameterIndex)
throws SQLException以 Java 編程語言中 Object 的形式獲取指定參數的值。如果值為 SQL NULL,則驅動程序返回一個 Java null。
此方法返回一個 Java 對象,其類型對應於使用 registerOutParameter 方法為此參數注冊的 JDBC 類型。通過將目標 JDBC 類型注冊為 java.sql.Types.OTHER,可以使用此方法來讀取特定於資料庫的抽象數據類型。
參數:
parameterIndex - 第一個參數是 1,第二個參數是 2,依此類推
返回:
保存 OUT 參數值的 java.lang.Object
拋出:
SQLException - 如果 parameterIndex 無效;如果發生資料庫訪問錯誤,或者在關閉的 CallableStatement 上調用此方法
4. 一個關於java調用mysql 存儲過程的問題
在存儲過程中如果有查詢結果集,在java中執行存儲過程後,應使用其父介面Statement的getResultSet()方法獲取查詢結果集,此方法就返回ResultSet,如你上面若想獲取存儲過程中查詢結果集應如下:
ResultSet rs = cst.getResultSet();
以下遍歷此rs即可... ...
5. 如何使用java程序備份和恢復MySql資料庫
java用開源的ssh jar包連接到b伺服器執行備份/恢復命令,同樣通過命令也可以獲取到備份的文件信息,恢復資料庫也是一樣的,通過命令把文件傳輸到b伺服器,通過命令進行還原
6. 求助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()}"來調用存儲過程。同時也可以編程傳入參數,進行查詢。
7. 關於java調用mysql存儲過程,簡答的存儲過程
看看這例子是怎麼調用的是不是你寫錯了
http://www.kanyinqing.com/read/it/database/411328.html