Java--JDBC连接数据库(二)

     本篇文章接着上篇文章,还剩下一个知识点是,可滚动的结果接集和可更新的结果集。一般默认情况之下,多结果集是不可以显式滚动,移动选择的。如果想要做到,需要指定一些参数,那么本篇就接着介绍如何操作可滚动的结果集。      默认情况下,结果集是不可以滚动的,如果想要可滚动就需要通过重载的构造方法创建一个不同的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的简单用法就介绍完了,如果其中有错误,望大家指出!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

CSharp每日代码示例:使用iTextSharp创建PDF文件

531
来自专栏极客猴

Django 学习笔记之模型高级用法(上)

前面有两篇文章简单介绍 Django 的模型,这一部分算是基础知识。我自己近期也总做了下总结,将花大概两篇的篇幅来分享下模型的一些高级用法。

433
来自专栏机器人网

中英文对照,瞬间理解西门子PLC指令

指令( 英文全称意思 ) :指令含义 1、LD ( Load 装载 ) :动合触点 2、LDN ( Load Not 不装载 ) : 动断触点 3、A ( A...

3317
来自专栏cnblogs

NHibernate联合主键详细示例

使用NHibernate实现一对多,多对一的关联很是简单,可如果要用复合主键实现确实让人有些淡淡的疼。虽然很淡疼但还是要去抹平这个坑,在下不才,愿意尝试。 以示...

1688
来自专栏菩提树下的杨过

Silverlight Telerik控件学习:RadTransitionControl

如果展示类似这种比较cool的图片轮换效果,用RadTransitionControl控件就对了,它提供的过渡效果非常cool! 原理并不复杂,可参见以前写的 ...

1877
来自专栏PPV课数据科学社区

【学习】七天搞定SAS(二):基本操作(判断、运算、基本函数)

? 今天开始注重变量操作。 SAS生成新变量 SAS支持基本的加减乘除,值得一提的是它的**代表指数,而不是^。* Modify homegarden dat...

2944
来自专栏生信宝典

R语言学习 - 箱线图一步法

箱线图 - 一步绘制 绘图时通常会碰到两个头疼的问题: 有时需要绘制很多的图,唯一的不同就是输入文件,其它都不需要修改。如果用R脚本,需要反复替换文件名,繁琐又...

2515
来自专栏CNN

RenderScript 让你的Android计算速度快的飞上天!

在上一篇文章Android自动手绘,圆你儿时画家梦! 中结尾提到,我将介绍提升轮廓提取速度相关内容,今天一起学习Android中的RenderScript。看完...

621
来自专栏lgp20151222

ResultSet相关ResultSetMetaData详细

DatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。 ResultSet 关于某个表的信息或一...

502
来自专栏搜云库

Spring Boot 中使用 Java API 调用 Elasticsearch

ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用。 Elastic...

95310

扫码关注云+社区