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

     默认情况下,结果集是不可以滚动的,如果想要可滚动就需要通过重载的构造方法创建一个不同的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. 在Tomcat中配置连接池和数据源

    1.DataSource接口介绍 (1)DataSource 概述 JDBC1.0原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource ...

  2. linkin大话数据结构--数组

    数组概述:如何正确理解数组?数组也是一种类型 数组是多个相同类型数据的组合,实现对这些数据的统一管理.数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量数组中的元 ...

  3. remap.config文件配置模板

    # # URL Remapping Config File # # Using remap.config allows you to accomplish two things: # # 1) Rew ...

  4. fscanf和fprintf

    fscanf和fprintf fscanf的字符串是在键盘的缓冲区,fprintf是在显示器的缓冲区. 1.函数原型: int fprintf(FILE *fp, const char *format ...

  5. AppScan扫描结果分析及工具栏使用

    Appscan的窗口大概分三个模块,Application Links(应用链接), Security Issues(安全问题), and Analysis(分析) Application Links ...

  6. Single-Pass Stereo Rendering for HoloLens——HoloLens的单程立体渲染

    原文网站:https://docs.unity3d.com/Manual/SinglePassStereoRenderingHoloLens.html Single-Pass Stereo Rende ...

  7. json模块和pickle模块的用法

    在python中,可以使用pickle和json两个模块对数据进行序列化操作 其中: json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作 pickle可以用于python ...

  8. ABP官方文档翻译 8.1 通知系统

    通知系统 介绍 发送模型 通知类型 通知数据 通知严重性 关于通知持久化 订阅通知 发布通知 用户通知管理 实时通知 客户端 通知存储 通知定义 介绍 在系统中通知用来基于特定的事件告知用户.ABP提 ...

  9. (python功能定制)复杂的xml文件对比,产生HTML展示区别

    功能的设计初衷: 处理复杂的xml对比,屏蔽同节点先后顺序的影响 主要涉及知识点: 1.xml解析 ------- ElementTree库 2.文件比对差别 ------- difflib库 3.获 ...

  10. 01 Mybatis 的配置和使用

    一.Mybatis 是什么 MyBatis 是一个支持普通SQL查询.存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装.MyB ...