java调用存储过程(stored procedures)的HelloWorld例子
java调用存储过程(stored procedures)的HelloWorld程序
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
马克-to-win:有点数据库基础的人都知道。存储过程(stored procedures)和java没什么关系。它是一段纯粹的数据库sql语言的程序,事先存储在数据库中。没有java程序调用,人家自己独立运行的也挺好。现在的问题就是,你有一个java程序,你想调用现有的一段存储过程,如何做这件事儿?我们底下的实验就是先向数据库存进去一个名为p4的存储过程,然后再编一段java程序去调用它。
以下就是我向我的数据库中,插入一个叫做p4的存储过程的截图。
下面解释一下:delimiter是定义边界的意思。delimiter $就是定义$为边界。一个$和下一个$之间就像一个区域一样,在这个区域之间的东西才会被执行。mysql缺省默认来讲见到;就执行,但看到delimiter $ 以后,就只会忍饥挨饿盯着直到下一个$出现,才会执行两个$之间的命令。
最后的delimiter ; 就把分隔符从$换回到默认的 ;(注意 delimiter后边一定有一个空格)
create procedure p4(OUT cnt int)
--创建MySQL存储过程p4
--此存储过程的过程名是p4,该过程包含1个参数,
--是输出类型的(以OUT标示),参数名是cnt,类型是int
select count(*) into cnt from test.login;
--再查询表test.login中count(*),将其输出到输出类型的参数cnt里面
call p4(@a);
调用p4存储过程,下面的@a是个mysql中的临时变量,就对应刚才的cnt。
顺便,如果想删除一个procedure,我们就用drop procedure p4;
mysql> use test
mysql> delimiter $
mysql> create procedure p4(OUT cnt int)
-> begin
-> select count(*) into cnt from test.login;
-> end
-> $
Query OK, 0 rows affected (0.00 sec)
-> delimiter ;
mysql> call p4(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> select @a;
+------+
| @a |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
下面的java程序就调用上面的p4存储过程。
例:4.1.1
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class TestMark_to_win {
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
String dbUrl = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "1234";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(dbUrl, user, password);
System.out.println("Connection is ok");
CallableStatement cs = con.prepareCall("{call p4(?)}");
cs.registerOutParameter(1, Types.INTEGER);
cs.execute();
/*int getInt(int parameterIndex)
Retrieves the value of the designated JDBC INTEGER parameter as an int in the Java programming language.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, and so on */
System.out.println(cs.getInt(1));
cs.close();
con.close();
}
}
result is:
Connection is ok
2