首页 > 代码库 > java调用存储过程

java调用存储过程

在其他地方我已经写过一个mySql存储过程的简单实现http://jianboli.blog.51cto.com/12075002/1884019

这里是java调用存储过程。

package com.lijianbo.procedure;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;

/**
 * @author 
 * 存储过程MySQL
 */
public class ProcedureMySql {
	 public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver"; 
	    public static final String URL = "jdbc:mysql://localhost:3306/test"; 
	    public static final String USERNAME = "root"; 
	     public static final String PASSWORD = "root"; 
	     public static void main(String[] args) throws Exception { 
//	          test1(); 
//	          test2(); 
	          testIdAdd();
	     } 
       
	public static void test1() throws Exception 
	 { 
          Class.forName(DRIVER_CLASS); 
	         Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 
	         String sql = "{CALL test1(?)}"; //调用存储过程 
        CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm 
         cstm.setString(1, "李"); //存储过程输入参数 
         cstm.execute(); // 执行存储过程 
         cstm.close(); 
         connection.close(); 
     } 
      /**
       * 查询总的价格
       * getTotalByUser2
       * call getTotalByUser2(1, true, @total);  -- 加税
	   *select @total;
       * @throws Exception
       */
	 public static void test2() throws Exception { 
	        Class.forName(DRIVER_CLASS); 
	         Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 
	         String sql = "{CALL getTotalByUser2(?,?,?)}"; //调用存储过程 
	         CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm 
	         cstm.setInt(1, 1); //设置第一个传入参数
	         cstm.setBoolean(2, true); //设置第二个传入参数
	         cstm.registerOutParameter(3, Types.DECIMAL); // 设置返回值类型 即返回值 
	          cstm.execute(); // 执行存储过程 
	         System.out.println(cstm.getString(3)); 
	         cstm.close(); 
	         connection.close(); 
	          
	 } 
	 /**
	  *id自增
	  * getTotalByUser2
	  * call getTotalByUser2(1, true, @total);  -- 加税
	  *select @total;
	  * @throws Exception
	  */
	 public static void testIdAdd() throws Exception {
		 Class.forName(DRIVER_CLASS); 
		 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 
		 String sql = "{CALL test1(?)}"; //调用存储过程 
		 CallableStatement cstm = connection.prepareCall(sql); //实例化对象cstm 
		 cstm.setString(1, "测试"); //设置第一个传入参数
		 cstm.execute(); // 执行存储过程 
		 cstm.close(); 
		 connection.close(); 
	 } 
	 
	 
	 
	 
}

存储过程既可以在java中调用,也可以在触发器中调用,欲知简单实现。可以参考我的上一篇文章“触发器的简单实现”。

http://jianboli.blog.51cto.com/12075002/1884180


我这里只是一个示例,你可以参考里面的注释,具体存储过程的名字要根据你自己写的来修改。

时间:2016年12月20日16:59:13

本文出自 “JianBo” 博客,请务必保留此出处http://jianboli.blog.51cto.com/12075002/1884370

java调用存储过程