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

  • 精!如何在IDEA中导入myeclipse项目、配置并运行(实例演示)

    125建站网站长原来开发的myeclipse项目直接在IDEA打开发现会有很多问题,根据解决过程,写出此文章供大家参考! 1.首先打开IDEA工具,选择导入项目,然后在弹出的窗口中选择要打开的myeclipse文件,然后点击确定。如图所示 2.选择Eclipse,然后一直下一步 3.正常我们SDK这里都配置好了,直接选择就好,然后完成项目的导入 4.导入的完…

    2023年2月3日 编程开发
    7.5K0
  • 单元测试环境、过程及任务,单元测试快速入门教程二

    单元测试环境及过程 单元测试环境 单元测试环境的建立是单元测试工作进行的前提和基础,在测试过程中起到的作用不言而喻。单元测试环境并不一定是系统投入使用后所需的真实环境,可采用模拟环境。 由于一个模块或一个方法(Method)不是一个独立的程序,在测试时要考虑它和外界的联系,因此要用到一些辅助模块来模拟与所测模块相联系的其它模块。辅助模块分两种: 驱动模块:相…

    2018年4月16日
    9.2K0
  • 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日
    3.9K0
  • 第一个Spring MVC 项目:Hello World(Eclipse版)

    125建站网前面分享了《Spring框架概述》,新学习的同学可以先阅读引文章,今天给大家分享第一个Spring MVC实战项目:Hello World 目录  一、MVC概要 二、Spring MVC介绍 三、第一个Spring MVC 项目:Hello World(Eclipse版) 3.1、通过Maven新建一个Web项目 3.2、添加依赖的jar包 3…

    2023年1月24日 编程开发
    1.1K0
  • 推荐!一个通用的javaBean很方便的实现连接数据库、查询、插入、修改功能

    这是一个通用的javaBean,能够很方便的实现连接数据库、查询、插入、修改功能。、 package com.common; import java.sql.*; public class DataBaseConn { public Connection conn = null; public void createConn(){ String DRIVER…

    2020年12月6日
    3.1K0
  • js中var a=b=1和var a=1,b=1的区别

    js中一次性定义多个变量的时候,可以用:var a=1,b=1这种中间用逗号隔开的方式,但有些时候为了省事,直接定义var a=b=1。 那这两种写法方式最后效果是一样的吗?有没有什么区别呢?请大家看下面的范例: 1、用var a=b=1的方式 由上图可以明显看出来,变量b的作用域已经是全局的了,因为在函数外可以调用到(可以正常的输出变量)。 2、用var …

    2022年3月19日
    5.2K0

发表回复

登录后才能评论