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%的人还看了以下文章

  • 快收藏!破解WiFi密码的Python程序源码泄露了

    通过 Python 脚本实现 WIFI 密码的暴力破解,从而实现免费蹭网。 泄露的Python程序源码: import pywifi from pywifi import const import time import datetime # 测试连接,返回链接结果 http://www.125jz.com/ 分享 def wifiConnect(pwd):…

    2023年1月29日
    2.2K0
  • 编写第一个Python程序——输出HelloWorld并运行

    上一章节我们讲解了Python开发环境搭建,今天学习使用 Eclipse编写第一个Python程序——输出HelloWorld并运行。 1.打开Eclipse,选择File——》New——》Other。在弹出的New窗口中,选择Pydev——》Pydev Project——》next。 2.在弹出的窗口中,依次填写Project name(工程名)——》Di…

    2019年6月24日 编程开发
    3.5K0
  • python 初学者练手上机实操一

    一、从键盘输入商品名称、商品的单价、商品的数量, 计算商品总价,并按如下格式输出: 商品名称:牛奶,单价:5元,数量:2件,总价:10元 二、从键盘输入年龄,如果>=18岁显示“已成年”,否则显示“未成年”。 三、输入三条边长,如果能构成三角形就计算周长并显示,否则显示“不能构成三角形”。 四、百分制成绩转换为等级制成绩。 要求:如果输入的成绩在90分…

    2023年4月7日
    9610
  • python pywifi库破解wifi密码提示“No module named ‘comtypes’”的解决方法

    在免费蹭网!破解WiFi密码的Python程序源码分享一文中,125建站网提供了详细的程序代码。 python中的pywifi库,利用它可以暴力破解一些简单的wifi密码,有些同学运行程序时提示错误:“No module named ‘comtypes’”! python中的No module named ‘comtypes’ 解释是…

    2023年1月29日
    2.8K0
  • Python 8大知识点——附详细实例代码。

    目录 1. for – else 2.lambda函数 3.列表推导式 4.列表索引的各种骚操作 5.三元表达式 6.巧用断言assert 7.while语句 8.with – as 1. for – else 什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的。十大装…

    2023年1月14日
    4650
  • idea不识别@webServlet注解,javax.servlet.htttp 找不到的解决方法

    在servlet3.0以后,web.xml中对Servlet配置,可以通过@WebServlet注解配置.下面是@WebServlet的属性列表: 属性名 类型 描述 name String 指定Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。 value …

    2020年8月22日 编程开发
    16.0K0

发表回复

登录后才能评论