Jorm使用JDBC式的Connection实现存储过程和函数的调用
2013-11-01 22:37
387 查看
Jrom使用JDBC式的Connection实现存储过程和函数的调用,这个问题是峰回路转的,前几天看了别人写的例子被误导了,一直纠结处理,今天通过Jorm原始的JDBC方式的存储过程调用实现了该功能,殊途同归,这就是许多持久化框架集成JDBC的最主要原因之一。
1、编写存储过程和函数
2、ConnectionManger的编写(获取Connection对象)
3、普通JDBC的写法调用存储过程和函数测试用例
注:此实现是JDBC实现的数据库存储过程和函数的调用方式,此处也未关闭Connection,因为系统中只需要创建一个Connection的实例就行了,若单独创建一个Connection的使用需要关闭该Connection,进行资源释放。
1、编写存储过程和函数
//存储过程 DROP PROCEDURE IF EXISTS count_has_same_name_proc; CREATE PROCEDURE count_has_same_name_proc (xname VARCHAR(50 ) ) BEGIN SELECT COUNT(* ) FROM t_user WHERE name like xname; END; //函数 DROP FUNCTION IF EXISTS count_has_same_name_func; CREATE FUNCTION count_has_same_name_func ( xname VARCHAR(50 ) ) RETURNS INT BEGIN DECLARE s INT ; SELECT COUNT(id ) into s FROM t_user WHERE name like xname; RETURN s; END;
2、ConnectionManger的编写(获取Connection对象)
package com.boonya.jorm.service.utils; import org.javaclub.jorm.Jorm; import com.mysql.jdbc.Connection; public class ConnectionManager { private static final Connection connection = (Connection) Jorm.getConnection(); public static Connection getInstance() { return ConnectionManager.connection; } }
3、普通JDBC的写法调用存储过程和函数测试用例
package com.boonya.jorm.test; import java.sql.SQLException; import org.junit.Assert; import org.junit.Test; import com.boonya.jorm.service.utils.ConnectionManager; import com.boonya.jorm.service.utils.LogManager; import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.ResultSet; public class ConnectionTest { @Test public void connection(){ Connection conn=ConnectionManager.getInstance(); Assert.assertNotNull("Connection:数据库连接不为空",conn); } @Test public void procedure(){ String sql = "call count_has_same_name_proc(?)"; Connection conn=ConnectionManager.getInstance(); try { PreparedStatement pstmt=conn.clientPrepareStatement(sql); pstmt.setString(1, "boonya"); ResultSet rs=(ResultSet) pstmt.executeQuery(); Assert.assertNotNull("procedure:数据集不为空",rs); while (rs.next()) { int count=rs.getInt(1); System.out.println("procedure:统计同名用户结果:"+count); } } catch (SQLException e) { LogManager.setLog("调用数据库procedure",e); } } @Test public void function(){ String sql = "select count_has_same_name_func(?)"; Connection conn=ConnectionManager.getInstance(); try { PreparedStatement pstmt=conn.clientPrepareStatement(sql); pstmt.setString(1, "boonya"); ResultSet rs=(ResultSet) pstmt.executeQuery(); Assert.assertNotNull("function:数据集不为空",rs); while (rs.next()) { int count=rs.getInt(1); System.out.println("function:统计同名用户结果:"+count); } } catch (SQLException e) { LogManager.setLog("调用数据库function",e); } } }
注:此实现是JDBC实现的数据库存储过程和函数的调用方式,此处也未关闭Connection,因为系统中只需要创建一个Connection的实例就行了,若单独创建一个Connection的使用需要关闭该Connection,进行资源释放。
相关文章推荐
- 几种常见模式识别算法整理和总结
- web服务器
- 路由器启动后如何定位IOS?
- VC项目配置基础 (VC6.0 和VC2005)
- jdk环境变量配置
- MATLAB中读取多幅图像
- Linux 远程桌面控制
- 机器学习与人工智能学习资源导引
- python c 扩展 ctype 以及 效率对比
- qt 库没有被正确安装 请运行make install 问题的可能原因
- 编程菜鸟的日记-初学尝试编程-实现字符串的逆序
- 平凡而又神奇的贝叶斯方法
- Linux中三种进程的区别分析
- 有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低)
- 关于java内存溢出的另一种处理方案
- 聚集索引更新后会不会马上重新排序
- 数据结构二------循环队列实现医院候诊诊治系统
- 已知二叉树前序和中序求后序
- JVM上“表达式问题”的解决方案-《Java 下一代: 没有继承性的扩展》笔记
- 仿射变换