在学习连接池原理的时候,写了个小小的连接池,在使用prepareStatement的时想到,我的连接是保存在连接池中,没有关闭,每次获取的prepareStatement中上次保存的参数是否还在?会不会影响下次的使用?

实验的时间到了:

1.先看看上一个操作使用的参数是否存在

Connection conn=DBConnectionManager.getInstance().getConnection();//从连接池获取连接
PreparedStatement ps=conn.prepareStatement("select * from s_user where vusercode=? or vusercode=?");
ps.setObject(1, "jimmy");
ps.setObject(2, "huangy");
ps.executeQuery();
PreparedStatement ps2=conn.prepareStatement("select * from s_user where vusercode=? or vusercode=?");
ps2.clearParameters();
ParameterMetaData meta=ps2.getParameterMetaData();
System.out.println(meta.getParameterCount());

结果是显示2,说明参数还在。

2.实际执行一下第二条语句,看看结果如何

Connection conn=DBConnectionManager.getInstance().getConnection();
PreparedStatement ps=conn.prepareStatement("select * from s_user where vusercode=? or vusercode=?");
ps.setObject(1, "jimmy");
ps.setObject(2, "huangy");
ps.executeQuery();
PreparedStatement ps2=conn.prepareStatement("select * from s_user where vusercode=? or vusercode=?");
ps2.clearParameters();
ParameterMetaData meta=ps2.getParameterMetaData();
System.out.println(meta.getParameterCount());
ps2.executeQuery();

结果为:

Exception in thread "main" com.ibm.db2.jcc.b.nm: [jcc][10143][10845][3.50.152] 参数 1 无效:未设置或注册参数。 ERRORCODE=-4461, SQLSTATE=42815at com.ibm.db2.jcc.b.wc.a(wc.java:579)at com.ibm.db2.jcc.b.wc.a(wc.java:57)at com.ibm.db2.jcc.b.wc.a(wc.java:102)at com.ibm.db2.jcc.b.uk.Xb(uk.java:3848)at com.ibm.db2.jcc.b.uk.e(uk.java:2848)at com.ibm.db2.jcc.b.uk.yb(uk.java:535)at com.ibm.db2.jcc.b.uk.executeQuery(uk.java:509)at cn.hy.test.test.main(test.java:29)

好吧,报错了,提示参数无效,这是我希望的,实验结束。当我想看看这是什么原理,发现反编译的代码看不懂……这里得问问园子里各位了。

转载于:https://www.cnblogs.com/dazui/archive/2012/11/19/2776709.html

java中PrepareStatement使用的一点小问题相关推荐

  1. 聊聊我们Java中代码优化的30个小技巧

    今天我们一起聊聊Java中代码优化的30个小技巧,希望会对你有所帮助. 1.用String.format拼接字符串 不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况. 比如现在有个 ...

  2. Java 中代码优化的 30 个小技巧(上)

    前言 今天我们一起聊聊 Java 中代码优化的 30 个小技巧,希望会对你有所帮助. 1 用 String.format 拼接字符串 不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情 ...

  3. Java 中代码优化的 30 个小技巧(中)

    11 位运算效率更高 如果你读过 JDK 的源码,比如 ThreadLocal.HashMap 等类,你就会发现,它们的底层都用了位运算. 为什么开发 JDK 的大神们,都喜欢用位运算? 答:因为位运 ...

  4. Java 中代码优化的 30 个小技巧(下)

    21 防止死循环 有些小伙伴看到这个标题,可能会感到有点意外,代码中不是应该避免死循环吗?为啥还是会产生死循环? 殊不知有些死循环是我们自己写的,例如下面这段代码: while(true) {if(c ...

  5. Java中代码优化的30个小技巧

    1.用String.format拼接字符串 String.format方法拼接url请求参数,日志打印等字符串. 但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用 ...

  6. Java中不可或缺的59个小技巧,贼好用!

    来源:https://blog.dogchao.cn/?p=70 <Effective JavaJava>名著,必读.如果能严格遵从本文的原则,以编写API的质量来苛求自己的代码,会大大提 ...

  7. Java中使用图片验证码 --菜鸟小回

    Java中使用图片验证码 一.第一种方式 工具类 @WebServlet("/BufferImage") public class BufferImage extends Http ...

  8. 关于JAVA中十进制转换二进制的小程序

    对于java中求二进制是将一个数分开成整数部分和小数部分,整数部分的按照除以2直到是0为止:小数部分是按照乘以2取整到0为止,对于特殊的小数就循环15次为止, 以下是代码: //十进制小数和整数的二进 ...

  9. java中的jgroup_JGroups实现聊天小程序

    本文实例为大家分享了JGroups实现聊天小程序的具体代码,供大家参考,具体内容如下 效果图: 代码部分: package com.lei.jgoups; import java.io.Buffere ...

  10. java中jstl核心包丢失,小博老师解析Java核心技术 ——JSTL核心标签库

    [引言] JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core.format.xml 和 sql)和一对通 ...

最新文章

  1. [每日一讲] Python系列:Python概述
  2. 还搞不懂 Java NIO?快来读读这篇文章!
  3. java新手笔记1 Hello World!
  4. 正则邮箱_自己写一个通用的邮箱正则表达式
  5. android远程桌面软件毕设_2019 远程桌面解决方案综述
  6. Xml文件保存值不能及时更新
  7. android之menu,一起学Android之Menu
  8. 乌龟Git clone失败错误码128解决办法
  9. 结合实际聊聊电平转换电路(常用电平转换电路总结)
  10. js封装倒计时函数实现倒计时效果
  11. 18966 两两配对差值最小
  12. 重组标签云-标签聚类及其评价研究
  13. 企业微信视频教程(Java标准版)-翟东平-专题视频课程
  14. 【哈夫曼树】创建哈夫曼树
  15. Java高并发程序设计(三)——JDK并发包(二)
  16. 学习汇编语言的重要性
  17. Linux环境部署Node.js
  18. Mod Organizer下载教程
  19. 生活的改变从这一刻开始:香港之旅
  20. early_stopping

热门文章

  1. HDU-1045 Fire NetFire Net 最大团
  2. go -context
  3. 如何制作通讯录vcf_【教程】刷机或更换手机后快速导入通讯录的方法
  4. 通过界面上传jar包到maven Nexus私服
  5. python打开word内对象_Python操作Word:常用对象介绍
  6. 【渝粤教育】国家开放大学2018年春季 8038-22T实用管理基础 参考试题
  7. 【渝粤教育】电大中专学前儿童健康教育 (7)作业 题库
  8. 【渝粤教育】电大中专职业生涯规划作业 题库
  9. 字符串未被识别为有效的布尔值
  10. 计算机视觉实战(十四)答题卡识别 (附完整代码)