本文实例讲述了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程序设计有所帮助。