一:存储过程概述
所谓存储过程是一组完成特定功能的SQL语句集。
利用google.com ,baidu.com可以搜索很多
摘自互联网:
http://baike.baidu.com/view/68525.htm
二:Java操作存储过程
java操纵存储过程主要是通过JDBC操作。
1) Java执行存储过程 返回的结果集使用getXXXX获得数据
package com.saas.jdbc; import java.sql.DriverManager; import java.sql.Connection; import java.sql.ResultSet; import java.sql.CallableStatement; import java.sql.SQLException; import java.sql.Types; public class TestProcedureDemo01 { public static String _URL="jdbc:mysql://127.0.0.1:3306/shopping_thpad_com?useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true"; public static String _LOGIN_NAME="root"; public static String _LOGIN_PASSWORD="123456"; private static Connection connect = null; private CallableStatement cstmt =null; private ResultSet rs = null; /** * 连接数据库 * @return */ public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException e) { e.printStackTrace(); } try { connect = DriverManager.getConnection(_URL, _LOGIN_NAME, _LOGIN_PASSWORD); } catch(SQLException e) { e.printStackTrace(); } return connect; } /** * executeUpdate() 是用来执行存储过程 */ public void execCall() { connect = getConnection(); try { cstmt = connect.prepareCall("{call test6(?,?)}"); cstmt.setString(1, "朱诞生第一次执行存储过程了"); //设置第一个参数的值 cstmt.registerOutParameter(2, Types.INTEGER); //设置第二个输出参数的类型 int i = cstmt.executeUpdate(); System.out.println(cstmt.getInt(2)); //获取第二参数的值 cstmt.close(); } catch(SQLException e){ e.printStackTrace(); } } /** * 关闭连接 */ public void doClose() { try { if(null!=rs) { rs.close(); rs=null; } if(null!=cstmt) { cstmt.close(); cstmt=null; } if(null!=connect) { connect.close(); connect=null; } } catch(SQLException e) { e.printStackTrace(); } } public static void main(String[]args) { TestProcedureDemo01 test = new TestProcedureDemo01(); test.getConnection(); test.execCall(); test.doClose(); } }
DELIMITER $$ USE `shopping_thpad_com`$$ DROP PROCEDURE IF EXISTS `test6`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `test6`(IN in_name VARCHAR(20) CHARACTER SET utf8,OUT count_num INT) BEGIN /*声明变量最大值*/ DECLARE max_id INT ; DECLARE f_num FLOAT; DECLARE f_num_1 FLOAT DEFAULT 0; DECLARE f_num_2 FLOAT DEFAULT 2; DECLARE v_age VARCHAR(5) CHARACTER SET utf8 DEFAULT '25' ; DECLARE v_sex VARCHAR(10) CHARACTER SET utf8 DEFAULT '男'; DECLARE create_date DATETIME DEFAULT NOW(); SELECT MAX(trade_id)+1 INTO max_id FROM test_proc ORDER BY create_date DESC LIMIT 1; INSERT INTO test_proc(trade_id,NAME,age,sex,create_date) VALUES(max_id,in_name,v_age,v_sex,create_date); SELECT COUNT(trade_id) INTO count_num FROM test_proc; END$$ DELIMITER ;
2) 执行存储过程,返回一条存储过程结果集合
3)执行存储过程,返回多条存储过程结果集合