本文實例講述了java調用mysql存儲過程的方法。分享給大家供大家參考。具體如下:
數據庫的測試代碼如下 :
1、新建表test
?
1 2 3 4 5 create table test( field1 int not null ) TYPE=MyISAM ; insert into test(field1) values(1);2、刪除已存在的存儲過程:
?
1 2 3 -- 刪除儲存過程 delimiter // -- 定義結束符號 drop procedure p_test;3、mysql存儲過程定義:
?
1 2 3 4 5 6 create procedure p_test() begin declare temp int; set temp = 0; update test set field1 = values(temp); end4、調用方法:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 CallableStatement cStmt = conn.prepareCall("{call p_test()}"); cStmt.executeUpdate(); import java.sql.*; /** iGoder */ public class ProcedureTest { /* 表和存儲過程定義如下: 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(); } /** * 調用帶有輸入參數的存儲過程 * @param in stored procedure input parametervalue */ 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) {