本篇文章接着上篇文章,还剩下一个知识点是,可滚动的结果接集和可更新的结果集。一般默认情况之下,多结果集是不可以显式滚动,移动选择的。如果想要做到,需要指定一些参数,那么本篇就接着介绍如何操作可滚动的结果集。

     默认情况下,结果集是不可以滚动的,如果想要可滚动就需要通过重载的构造方法创建一个不同的Statement对象,如下:

Statement statement = dbConn.createStatement(type,concurrency);

//如果是预编译的Statement对象
PreparedStatement statement = dbConn.prepareStatement(command,type,concurrency);

其中,type的取值范围如下:

TYPE_FORWARD_ONLY         结果集不能滚动(默认)
TYPE_SCROLL_INSENSITIVE 结果集可以滚动,对原数据库不敏感
TYPE_SCROLL_SENSITIVE 结果集可以滚动,对原数据库敏感

而Concurrency的取值范围如下:

CONCUR_READ_ONLY         结果集不能用于更新数据库
CONCUR_UPDATEABLE 结果集可以用来更新数据库
Statement statement = dbConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet rs = statement.executeQuery("SELECT * from users");

  while(rs.next()){
System.out.println(rs.getRow());
}

上述代码将会打印从一开始打印知道结果集最后一行,我们看到,next方法可以滚动至上一行,previous方法可以滚动到下一行。这种逻辑可能正好和我们的逻辑相反,你可以认为整个结果集是倒置的。absolute(n)方法可以滚动到指定的行号位置,relative()方法可以滚动到相对于当前行号的指定位置。

while(rs.next()){
System.out.println(rs.getRow());
rs.relative(1);
}

这一段代码展示了各行输出的效果。

     说完了结果集的滚动操作,下面介绍结果集的更新操作。那什么是结果集的可更新操作呢?就是指,从数据库中查询出来的结果集,我们通过操作此结果集会映射到数据库中。下面看看具体代码的实现。

Statement statement = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = statement.executeQuery("SELECT * from users"); rs.next(); rs.updateString("pass","1"); rs.updateRow(); statement.close();
dbConn.close();

上述代码中主要涉及到了三条语句,createStatement中参数传递的更改。第二,rs.updateString("pass","1");,我们更改结果集中的信息都是使用的方法UpdateXXX,和我们的getXXX类似。最后一句是非常重要的,之前的所有更改操作都是对于结果集的操作,而最后一句rs.updateRow();则是将结果集的更改内容映射到数据库中。如果在使用中忘记添加了这局代码的调用,之前的所有更改将会被丢弃。至于updateXXX中,XXX的类型,只要sql中有的类型,都会对应一个调用时的类型。nvarchar对应我们的string,int对应int等。

     除了修改结果集,我们还可以添加行到结果集中,删除结果集中当前的行。具体操作如下:

rs.moveToInsertRow();
rs.updateInt("id",20);
rs.updateString("name","walker");
rs.insertRow();
rs.moveToCurrentRow();

第一句代码moveToInsertRow,将游标移动到了特定的位置,从当前行离开,到结果集的末尾位置,调用update方法为每个字段赋值,没赋值的统统为null,然后调用insertRow插入到结果集中并且映射数据库。最后一条语句moveToCurrentRow,返回之前离开的位置。

     删除结果集中的某一行就比较简洁:

rs.deleteRow();

就一条语句表示从结果集中将当前游标执行的行删除并且同步映射数据库。

     至此,jdbc的简单用法就介绍完了,如果其中有错误,望大家指出!

Java--JDBC连接数据库(二)的更多相关文章

  1. 纯Java JDBC连接数据库,且用JDBC实现增删改查的功能

    Java JDBC连接数据库 package cn.cqvie.yjq; import java.sql.*; /** * 注册数据库的驱动程序,并得到数据库的连接对象 * @author yu * ...

  2. Java JDBC连接数据库 Access连接数据库

    1.加载JDBC驱动程序:  在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),再通过java.lang.Class类的静态方法forName(String  classN ...

  3. [原创] Java JDBC连接数据库,反射创建实体类对象并赋值数据库行记录(支持存储过程)

    1.SqlHelper.java import java.lang.reflect.*; import java.sql.*; import java.util.*; public class Sql ...

  4. JAVA JDBC 连接数据库

    方式一 Driver driver = new com.mysql.jdbc.Driver(); String url = "jdbc:mysql://localhost:3306/test ...

  5. java jdbc连接数据库,Properties 属性设置参数方法

    今天在整合为数据库发现在配置中实现的赋值方式,可以用代码实现.特记录下共以后参考: 代码:        // 操作数据库        Connection conn; String strData ...

  6. java JDBC 连接数据库查询数据与直接使用sql的疑问

    JDBC 封装连接是好的前提: SystemAuthorizingRealm c = new SystemAuthorizingRealm(); conn = c.getConnection(); / ...

  7. jdbc基础 (二) 通过properties配置文件连接数据库

    csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...

  8. 代码的二次重构(开篇:JDBC连接数据库)

    Java中使用JDBC连接数据库时,若是使用初级的代码,代码复用率非常低,连接过程简单来说分为以下几个步骤: 加载驱动包 准备好URL链接获取数据库连接(driver和url根据不同的数据库的不同而不 ...

  9. 转 JDBC连接数据库(二)——连接池

    https://www.cnblogs.com/xiaotiaosi/p/6398371.html 数据库保持长连接,不过一直都是idle,除非有用户激活连接,这样后果是无法删除用户,但是不影响数据库 ...

  10. java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

随机推荐

  1. asp.net web api 向客户端返回错误信息

    1使用Http状态码 ASP.NET Web Api框架提供了Http状态码的值,如下图所示. 虽然有这些预定义的状态码,但在实际项目中使用自定状态码结合预定义状态码更有优势. 通过在适当的位置抛出异 ...

  2. JAVA中实现让程序等待一段时间的方法

    JAVA中想让代码等待一段时间再继续执行,可以通过让当前线程睡眠一段时间的方式. 方法一:通过线程的sleep方法. Thread.currentThread().sleep(1000); 在需要程序 ...

  3. 02_HTML5+CSS详解第三天

    WebStorage简单的网页留言板用到的函数有3个1.saveStorage函数使用"new Date().getTime()"语句来获取当前的日期和时间戳,然后使用localS ...

  4. 【转】GAMITBLOBK中固定解、浮点解、约束解、松弛解等解类型解释

    在GAMIT/GLOBK的使用过程中,经常会碰到固定解.浮点解.约束解.松弛解及其相关组合解(如约束固定解)等词汇,对于初学者,一时难以弄明白其中的含义,一般只有按部就班按照教程中,怎么说就怎么弄,不 ...

  5. IOS 时间字符串转换时间戳失败问题

    链接:https://pan.baidu.com/s/1nw6VWoD 密码:1peh 有时候获取到的时间带有毫秒数或者是(2018-2-6 11:11:11)格式的(别说你没遇到过,也别什么都让后台 ...

  6. Android项目目录结构

    JDK JDK是java语言的软件开发工具包,它包含了java的运行环境,工具集合,基础类库等内容   Android SDK 是谷歌提供的 Android 开发包,在开发Android 项目的时候 ...

  7. python 3.x 爬虫基础---http headers详解

    前言 上一篇文章 python 爬虫入门案例----爬取某站上海租房图片 中有对headers的讲解,可能是对爬虫了解的不够深刻,所以老觉得这是一项特别简单的技术,也可能是简单所以网上对爬虫系统的文档 ...

  8. 时间函数DateTime()的用法

    //2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...

  9. JavaBean命名规范

    ———————————————————————————————————————————————————————— 属性名/类型                    |                 ...

  10. 策略模式(Strategy Method)

    策略模式可以看做“可插入式算法(Pluggable)”,将子类各自的行为和公共的逻辑分离开来,将子类的行为抽象为算法插入到公共的逻辑中,这样替换子类的行为也不会对公共逻辑产生影响,也不会影响到调用类的 ...