java 创建mysql代参数存储过程和调用

         与java相比用sql语句对数据查询结果做基础的数据操逻辑处理有更高的效率,从而可以提升系统的运行速度,而存储过程作为数据操作的一个重要工具,小编以为作为一个经常与数据库打交道的 java程序员有必要了解一下,存储过程不仅可以提升查询效率,更可以完成大部分的数据逻辑处理。特步是在数据结构设计的不好的情况下存储过程可以大大的优化java代码。废话就不多说了,分享一下自己的收获。 

            

package com.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
	   @org.junit.Test
       public void TestPc(){
		    String[] localtions={"applicationContext.xml",
		    		  "spring-mvc.xml"};
		    ApplicationContext ctx=new ClassPathXmlApplicationContext(localtions);
	        DataSource ds=(DataSource) ctx.getBean("dataSource");
	        //删除存储过程
	        String dpSql="DROP PROCEDURE if EXISTS javapc;";
	        //创建存储过程
	        String cpSql="CREATE PROCEDURE  javapc(in myid VARCHAR(64)) "
	        		   + "  BEGIN"
	        		   + "  DECLARE wish_id VARCHAR(64);"//自定义参数wish_id
	        		   + "  DECLARE wish_memberid VARCHAR(64);"//自定义参数wish_memberid
	        		   + "  DECLARE wish_goodsid VARCHAR(64);"//自定义参数wish_goodsid
	        		   + "  DECLARE wish_addtime VARCHAR(64);"//自定义参数wish_goodsid
	        		   + "  DECLARE  result INT DEFAULT 0;"//自定义参数result
	        		   + "  if(EXISTS(SELECT * from tb_wish WHERE id=myid)) THEN"//判断SELECT * from tb_wish WHERE id=myid查询结果是否为空
	        		   + "       SET result=0;"//将查询到的结果给传递个自定义参数wish_id,wish_memberid,wish_goodsid,wish_addtime
	        		   + "       SELECT id,memberid,goods_id,addtime into wish_id,wish_memberid,wish_goodsid,wish_addtime from tb_wish WHERE id=myid  ;  "
	        		   + "  ELSE"
	        		   + "     SET result=0; "
	        		   + "  END IF; "//将结果返回由调用端读取  返回多条记入的时候创建临时表,把中间结果放入临时表中最后select * from 临时表
	        		   + "  select wish_id,wish_memberid,wish_goodsid,wish_addtime;"
	        		   + "  end";
	        //调用存储过程
	        String cBql="call javapc(?)";
	        try {
	        	 //获取连接
				Connection conn=ds.getConnection();
				//创建回话
				Statement cstm =conn.createStatement();
				 //删除已存在的存储过程
				cstm.execute(dpSql);
				//创建存储过程
				cstm.execute(cpSql);
				 //创建可以调用存储过程的回话
				CallableStatement cbsm= conn.prepareCall(cBql);
				//设置参数
				cbsm.setString(1, "0BB8B309-045D-48E5-BFCF-B90966D04D5D");
				//执行存储过程
				cbsm.execute();
				//获取结果给集
				ResultSet  rs=cbsm.executeQuery();
				//cbsm.registerOutParameter(1, java.sql.Types.INTEGER);
				while(rs.next()){
			    	   System.out.println(rs.getString("wish_id"));
			    	   System.out.println(rs.getString("wish_memberid"));
			    }
			   
	        } catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("创建链接失败");
	        	e.printStackTrace();
			}   
	      //  System.out.println(ds);
	   }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值