Java操作存储过程1

一:存储过程概述

所谓存储过程是一组完成特定功能的SQL语句集。

  利用google.com ,baidu.com可以搜索很多

  摘自互联网:

写道
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来, 以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,可由应用程序通过一个调用来执行,而且允许用户声明变量 。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。

   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)执行存储过程,返回多条存储过程结果集合

你可能感兴趣的:(java)