本文實例講述了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 ); end |
4、調用方法:
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) { ex.printStackTrace(); } } } } /** *獲取數據庫連接的類 */ 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; } } |
希望本文所述對大家的java程序設計有所幫助。