createStatement参数详解,带参数与不带参数的区别

Connection接口的createStatement方法,可用来创建向数据库发送SQL语句的对象,用于执行SQL语句。

常用代码:

Statement stmt = con.createStatement();

Statement stmt = con.createStatement (int resultSetType,int resultSetConcurrency);

createStatement参数详解

resultSetType:结果集的类型

TYPE_FORWARD_ONLY告诉系统读取资料列时只向前卷动。

TYPE_SCROLL_SENSITIVE修改後马上反映在ResultSet中。

TYPE_SCROLL_INSENSITIVE修改後不反映在ResultSet中。

ResultSet包含一个指向数据当前行的指针,在最初得到ResultSet的时候,这个指针指向第一条数据之前,next方法会将指针移动至下一条记录。

TYPE_FORWARD_ONLY告诉系统读取资料列时只向前卷动,如有列id name sex age。在取得name列之后,将不能再返回获取id列的值;

TYPE_SCROLL_INSENSITIVE,ResultSet指针可以前后移动,表示不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反映出来;

案例:

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);   
ResultSet rs = stmt.executeQuery("select id, name from table1");   
rs.last(); //移动到最后一行   
int rownum = rs.getRow(); //获得当前行的行号,即记录的条数   
rs.absolute(1);   //将指针返回至第一条记录 

int resultSetConcurrency:结果集的同步类型

CONCUR_READ_ONLY:当前ResultSet对象只读,不能更新;

CONCUR_UPDATABLE:当前ResultSet可以更新。

在实际开发中,可以利用CONCUR_UPDATABLE参数来实时更新ResultSet中的数据如:

rs.absolute(5); // 移动rs指针至第5行数据
rs.updateString("NAME", "张军"); // 将该行name的值改为张军
rs.updateRow(); //更新数据源的数据

带三个参数的createStatement语句

createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

其中resultSetHoldability可选值是:

1、ResultSet.HOLD_CURSORS_OVER_COMMIT 表示修改提交时,不关闭ResultSet的游标
2、ResultSet.CLOSE_CURSORS_AT_COMMIT  表示修改提交时,关闭ResultSet的游标

对于查询操作,不带参数的方法createStatement(),

等同于第二种方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY),

等同于第三种方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT)

Statement stmt = Conn.createStatement(1004,1007);

这些参数名称都对应一个整数值:
TYPE_FORWARD_ONLY=1003
TYPE_SCROLL_INSENSITIVE=1004
TYPE_SCROLL_SENSITIVE=1005
CONCUR_READ_ONLY=1007
CONCUR_UPDATABLE=1008

createStatement带参数与不带参数的性能比较

对于一个比较复杂的sql语句,createStatement加不加参数需要的时间到底是多少呢?

st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

开始时间:Sat Jun 28 15:33:47 CST 2014
结束时间:Sat Jun 28 15:33:53 CST 2014   ps:7秒左右,数据大概120条

st = conn.createStatement();

开始时间:Sat Jun 28 15:36:21 CST 2014
结束时间:Sat Jun 28 15:36:22 CST 2014

开始时间:Sat Jun 28 15:36:30 CST 2014
结束时间:Sat Jun 28 15:36:30 CST 2014  ps:1秒不到,数据120条

看到这里,我果断去掉了参数。

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/2812.html

(2)
江山如画的头像江山如画管理团队
上一篇 2018年10月23日 下午1:21
下一篇 2018年10月24日 上午9:02

99%的人还看了以下文章

  • 手机上可以python编程吗,手机如何开发python

    想在手机上编写python代码? python语言应用很广泛,很多小伙伴想利用空闲时间学习Python,但是有时候身边没有电脑,今天就给大家分享两种手机编写运行python的方法,让你可以直接在自己的手机上做python开发学习。 一、直接在线编写运行(免安装) 手机通过浏览器打开 https://c.runoob.com/compile/9/ 推荐:★★★…

    2022年3月16日 编程开发
    8.6K0
  • 输入python显示不是内部命令的原因及解决方法

    问题原因:没有将python的安装路径添加到环境变量中。 解决方法: 首先在桌面上右键点击“此电脑”,选择“属性”,弹出系统界面选择“高级系统设置”,进入系统属性界面后在“高级”选项中选中“环境变量”。 然后在“系统变量”中找到变量Path,双击Path变量进入编辑界面。 接着在编辑环境变量对话框中点击“新建”,添加Python的安装路径,之后一直点确定即可…

    2023年5月18日 编程开发
    2.2K1
  • SyntaxError: Non-UTF-8 code starting with ‘xc1′,’xc4′,’xc7’,解决方法

    phython编程入门,新手学习phython会遇到*.py文件运行时,出现如下错误: SyntaxError: Non-UTF-8 code starting with ‘\xc7’ in file E:\Pythondemo\2.py on l ine 1, but no encoding declared; see http://python.org/…

    2019年8月23日
    5.8K0
  • python turtle绘画0基础练习

    一、题目:导入turtle包(import turtle),绘制边长为100的正方形。 要求: 1、新建一个“turtle2.py”文件 2、编写程序。 3、调试程序。 4、排除错误。 二、导入turtle包(import turtle),绘制半径为40的圆(circle)。 三、题目:导入turtle包(import turtle),绘制边长为60的等边三…

    2023年6月15日
    3.1K0
  • 填坑!安装opencv-python库后,没有CV2文件夹,找不到haarcascade分类器文件

    python内import cv2正常运行,但是根据以下方法在e:\python\python39\lib\site-packages下找不到CV2文件夹,也找不到data\haarcascades相关分类器文件。 OpenCV-python haarcascade各种分类器文件位置 使用 pip list 查看是否安装opencv-python E:\py…

    2020年12月8日
    8.1K0
  • 第六章 Servlet技术(重点章节)

    学习目标:
    掌握Servlet的概念、特点及生命周期
    掌握Servlet与JSP的区别
    理解Servlet在Web项目中的作用
    掌握Servlet常用对象及其方法

    2018年2月22日
    3.3K0

发表回复

登录后才能评论