1.例子1:一个简单的存储过程的java调用:有参数无返回值!
<1>.存储过程的写法:
- /*写一个简单的存储过程
- DELIMITER //
- CREATE PROCEDURE insert_test(
- IN username VARCHAR(50),
- IN address VARCHAR(50)
- )
- BEGIN
- INSERT INTO t_user(username,address) VALUES(username,address);
- END //
- DELIMITER ;
-
- /*调用该存储过程*/
- CALL insert_test('ok','chenc');
<2>.java调用存储过程:
- package com.hanchao.test;
-
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
-
-
-
-
-
-
- public class TestProcedure {
-
- public static void main(String[] args) throws Exception {
-
-
-
-
-
-
-
-
-
-
-
-
-
- Class.forName("com.mysql.jdbc.Driver");
- Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root");
-
-
- CallableStatement cs = con.prepareCall("{call insert_test(?,?)}");
- cs.setString(1, "tom");
- cs.setString(2, "America");
-
- int rows = cs.executeUpdate();
- if(rows > 0) {
- System.out.println("thank you !");
- } else {
- System.out.println("good bye !");
- }
- cs.close();
- con.close();
- }
- }
2.无参数,只有返回结果集。(相当于全查询)
<1>.存储过程的写法:
- /*全查询*/
- DELIMITER //
- CREATE PROCEDURE find_test()
- BEGIN
- SELECT id,username,address FROM t_user;
- END //
- DELIMITER ;
-
- /*调用该存储过程*/
- CALL find_test();
<2>.java调用存储过程:
- package com.hanchao.test;
-
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
-
-
-
-
-
-
-
- public class TestProcedure2 {
-
- public static void main(String[] args) throws Exception {
- Class.forName("com.mysql.jdbc.Driver");
- Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root");
-
-
- CallableStatement cs = con.prepareCall("{call find_test}");
- ResultSet rs = cs.executeQuery();
-
- while(rs.next()) {
- int id = rs.getInt("id");
- String username = rs.getString("username");
- String address = rs.getString("address");
- System.out.println(id+"\t"+username+"\t"+address);
- }
- rs.close();
- cs.close();
- con.close();
-
-
-
-
-
- }
- }
3.有返回值参数的存储过程;(获得刚刚插入数据的ID号)
<1>.存储过程的写法:
- /*带返回值参数的存储过程*/
- DELIMITER //
- CREATE PROCEDURE insert_getId(
- IN username VARCHAR(20),
- IN address VARCHAR(20),
- OUT id INT
- )
- BEGIN
- INSERT INTO t_user(username,address) VALUES(username,address);
- SELECT LAST_INSERT_ID() INTO id;
- SELECT id;
- END //
- DELIMITER ;
-
- /*调用该存储过程*/
-
CALL insert_getId('jack','USA',@id);
-
-
-
- /*比较一下这个存储过程与上面的不同之处!以及调用的不同之处!!*/
-
-
- /*带返回值参数的存储过程*/
- DELIMITER //
- CREATE PROCEDURE insert_getId12(
- IN username VARCHAR(20),
- IN address VARCHAR(20),
- OUT id INT
- )
- BEGIN
- INSERT INTO t_user(username,address) VALUES(username,address);
- SELECT LAST_INSERT_ID() INTO id;
- #SELECT id; /*体会一下这一句的不同!*/
- END //
- DELIMITER ;
-
- /*调用该存储过程*/
- CALL insert_getId12('jack1','USA1',@id);
- SELECT @id;
<2>.java调用存储过程:
- package com.hanchao.test;
-
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.Types;
-
-
-
-
-
-
- public class TestProcedure3 {
-
- public static void main(String[] args) throws Exception {
- Class.forName("com.mysql.jdbc.Driver");
- Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root");
-
-
- CallableStatement cs = con.prepareCall("{call insert_getId(?,?,?)}");
- cs.setString(1, "hanchao");
- cs.setString(2, "Canada");
- cs.registerOutParameter(3, Types.INTEGER);
- cs.executeUpdate();
-
- int id = cs.getInt(3);
-
- System.out.println("刚刚插入的ID为:"+id);
- cs.close();
- con.close();
- }
- }
怎么样,童鞋们知道如何使用java调用存储过程了吗??这只是最简单的,最基本的。往后的日子,我们一起继续学习!O(∩_∩)O~
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/926333,如需转载请自行联系原作者