存储过程调用

上传人:M****1 文档编号:465768150 上传时间:2022-11-16 格式:DOCX 页数:13 大小:15.65KB
返回 下载 相关 举报
存储过程调用_第1页
第1页 / 共13页
存储过程调用_第2页
第2页 / 共13页
存储过程调用_第3页
第3页 / 共13页
存储过程调用_第4页
第4页 / 共13页
存储过程调用_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《存储过程调用》由会员分享,可在线阅读,更多相关《存储过程调用(13页珍藏版)》请在金锄头文库上搜索。

1、传智播客statement 和 preparedStatement 比较(2010-01-09 09:56:52)转载标签:statemnt性能执行存储过程高级查询多表查询dbutileit分类:学习生涯思路:a. statement和预处理sql语句的性能比较。/oracle机制完成b. 调用存储过程实现某一功能模块c. 高级查询。多条件查询。主要实现思路:拼接sql语句和模糊查询结合。d. 多表连接高级查询。添加多表连接条件。只不过不能再用dbutile的query简单方法。 必须 重写接口 ResultSetHandler并出 入 到query方 法中,不 能使用new BeanList

2、Handler(clazz)方式进行查询。Statement VS PreparedStatement 比较5000条数据:前者7秒 后者3秒代码的可读性和可维护性.PreparedStatement能最大可能提高性能:DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被 DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句 就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配, 没有缓存语句的意义.事实是没有数据库会对

3、普通语句编译后的执行代码缓存.这样每执行一 次都要对传入的语句编译一次.PreparedStatement能保证安全性单条语句的执行:PreparedStatement执行效率比statement执行率低调用存储过程Connection conn=null;DBManager dBManager=new DBManager();CallableStatement cstmt=null;conn=dBManager.getConnection();String sql=call insertdept(?,?,?)”;try /创建一个CallableStatement对象来调用数据库存储过程cs

4、tmt=conn.prepareCall(sql);cstmt.setInt(1, 34);cstmt.setString(2, ppp);cstmt.setString(3, beijing);/在此PreparedStatement对象中执行SQL语句,该语句可以是任何种类的 SQL语句cstmt.execute(); catch (SQLException e) / TODO Auto-generated catch blocke. printStackTrace();finallydBManager.closeResourece(conn, cstmt, null);高级查询精华详解查

5、询条件:String username=; /request.getParameter(username);String sex=;/request.getParameter(sex);String edu=;/request.getParameter(edu);Date beginDate=null;/request.getParameter(beginDate);Date endDate=null;/request.getParameter(endDate);随意拼接,并按要求查询出结果方法一:拼接sql字符串,如果查询条件为”则用“%”来处理,但问题是时间类型的 数据没法处理重点如何组成

6、复合条件的sql语句/处理客户端传递过来的数据if(username=null|.equals(username.trim()username=;String sql=select id,username,realname,sex,birthday, edu,+hiredate from employees +where username like %”+username+% and sex like %”+sex+% and edu like %”+edu+%”;方法二:拼接sql字符串,如果查询条件为”则不添加该字段,精华:where 1=1防止出错!!但问题是时间类型的数据没法处理Str

7、ing sql=select id,username,realname,sex,birthday, edu,+hiredate from employees where 1=1 ;/判断字段是否存在,如果不存在则不添加if(username!=null&!”.equals(username.trim()sql=sql+ and username like %”+username.trim()+%”;方法三:拼接sql字符串,如果查询条件为”则不添加该字段,精华:用一个boole变量来 标示sql语句中是否存在where关键字防止出错!但问题是时间类型的数据没法处理String sql=sele

8、ct id,username,realname,sex,birthday, edu,+hiredate from employees;boolean whereFlag=false; /表示没有 whereif(username!=null&!”.equals(username.trim()if(!whereFlag)sql=sql+ where username like %”+username.trim()+%”;whereFlag=true;elsesql=sql+ and username like %”+username.trim()+%”;if(sex!=null&!”.equal

9、s(sex.trim()if(!whereFlag)sql=sql+ where sex = +sex.trim()+”;whereFlag=true;elsesql=sql+ and sex = +sex.trim()+”;方法四:绝对经典。精华:拼接sql如果查询条件不存在则不加入.用预编译的 prepareStatement来处理sql语句,用list集合来存储sql语句中需要的对应参数,及其 对应的参数类型.List paramsList=new ArrayList();List typeList=new ArrayList();String sql=select id,usernam

10、e,realname,sex,birthday, edu,+hiredate from employees +where 1=1;if(username!=null&!”.equals(username.trim()sql=sql+ and username like ?;paramsList.add(%”+username+%”);typeList.add(java.sql.Types.VARCHAR);if(sex!=null&!”.equals(sex.trim()sql=sql+ and sex = ?;paramsList.add(sex);typeList.add(java.sql

11、.Types.VARCHAR);if(edu!=null&!”.equals(edu.trim()sql=sql+ and edu like ?;paramsList.add(%”+edu+%”);typeList.add(java.sql.Types.VARCHAR);当开始日期和结束日期都不为null的时候,才执行查询if(beginDate!=null&endDate!=null)sql=sql+ and birthday between ? and ?;paramsList.add(beginDate);typeList.add(java.sql.Types.DATE);paramsL

12、ist.add(endDate);typeList.add(java.sql.Types.DATE);/list转化为对象数组 返回按适当顺序包含列表中的所有元素的数组(从第一个元 素到最后一个元素)。Object params=paramsList.toArray();/Integer口 type=new IntegertypeList.size();/toArray(Integer type)typeList.toArray(type);System.out.println( +sql);DBManager dbManager =new DBManager();Connection con

13、n=null;PreparedStatement pstmt=null;ResultSet rs=null;conn=dbManager.getConnection();pstmt=conn.prepareStatement(sql);if(params!=null¶ms.length0)for(int i=0;iparams.length;i+)/使用给定对象设置指定参数的值。第二个参数必须是Object类型 pstmt.setObject(i+1, paramsi,typei);rs=pstmt.executeQuery();while(rs.next()System.out.pr

14、intln(rs.getObject(1)+ +rs.getObject(2)+ +rs.getObject(3)+rs.getObject(4)+ +rs.getObject(5)+rs.getObject(6)+ +rs.getObject(7);1.什么时候用存储过程当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在 一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更 改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威 力和优势主要体现在:1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语 句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。2. 当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此 复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。3. 存储过程可以重复使用,可减少数据库开发人员的工作量。4. 安全性高,可设定只有某此用户才具有对指定存储过程的使用权。优点:1. 速度快。尤其对于较为复杂的逻辑,减少了网络流量之间的消耗。2. 写程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号