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

     默认情况下,结果集是不可以滚动的,如果想要可滚动就需要通过重载的构造方法创建一个不同的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. Python Django连接(听明白了是连接不是创建!)Mysql已存在的数据库

    再声明一次!是连接不是创建!网上的一些人难道连接和创建这俩词都弄不懂就在那里瞎写一些文章! (Python Django连接存在的数据库) Python连接存在的数据库-------MySql 1.首 ...

  2. Python之Django rest_Framework框架源码分析

    #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...

  3. mongodb查询操作分析

    背景 mongodb 提供了类sql的数据查询及操作方式,同时也包含了聚合操作.索引等多个机制: 按以往的经验,不当的库表操作或索引模式往往会造成许多问题,如查询操作缓慢.数据库吞吐量低下.CPU或磁 ...

  4. linux ss 命令

    ss 是 Socket Statistics 的缩写.ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似.但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连 ...

  5. Cypher查询语言--Neo4j之聚合函数(五)

    目录 聚合Aggregation 计数 计算节点数 分组计算关系类型 计算实体数 计算非空可以值数 求和sum 平均值avg 最大值max 最小值min 聚类COLLECT 相异DISTINCT 聚合 ...

  6. 解决Bug:Size of a request header field exceeds server limit

    用了cms 发现这玩意真不好,老是有各种奇芭的问题跳出来 有时浏览网页时会出现 Bad Request Your browser sent a request that this server cou ...

  7. Java高并发的常见应对方案

    Java高并发的常见应对方案 一.关于并发我们说的高并发是什么? 在互联网时代,高并发,通常是指,在某个时间点,有很多个访问同时到来. 高并发,通常关心的系统指标与业务指标? QPS:每秒钟查询量,广 ...

  8. MySQL笔记-turncat、drop、delete的区别

    TRUNCATE 语法: TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]功能: 删除整个表的数据并释放空间   描述: 由于Trunca ...

  9. HDU1005 找规律 or 循环点 or 矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=1005 1.一开始就注意到了n的数据范围 <=100 000 000,但是还是用普通的循环做的,自然TLE了 ...

  10. Redis 学习(三) —— 事务、消息发布订阅

    一.Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation) ...