与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);
}
}