码迷,mamicode.com
首页 > 数据库 > 详细

JDBC API 可滚动可编辑的结果集

时间:2017-11-24 00:12:09      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:column   访问   方法   from   链接   es2017   设计   sys   exe   

JDBC的API中的链接数据和创建statement并且执行读取ResultSet大家已经很熟悉了,这边介绍设置statement的属性使结果集可以移动并且进行编辑同步回数据库。

Statement 有两个属性分别用来设置结果集ResultSet是否可以滚动以及是否可以编辑同步回数据库。

技术分享图片

图片来自《java核心技术卷II-高级特性》,推荐阅读。

 

具体使用上代码:

try (Connection connection = DriverManager.getConnection(url, username, password)) {
            System.out.println("数据库链接成功!");

            try (Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)) {
                String command = "insert into a_dept(name) values(‘1‘),(‘2‘)";
                int count = statement.executeUpdate(command);
                System.out.println("受影响行数:" + count);

                String selectSql = "select * from a_dept";

                try (ResultSet resultSet = statement.executeQuery(selectSql)) {
                    while (resultSet.next()) {
                        System.out.print("修改前id " + resultSet.getInt("id") + "的值是: ");
                        System.out.println(resultSet.getString("name"));
                        resultSet.updateString("name", "我是修改过的");
                        resultSet.updateRow();
                        System.out.print("修改后id " + resultSet.getInt("id") + "的值是: ");
                        System.out.println(resultSet.getString("name"));
                    }

                    resultSet.moveToInsertRow();
                    resultSet.updateString("name", "我是插入的");
                    resultSet.insertRow();
                    resultSet.beforeFirst();
                    System.out.println("打印出所有的值:");
                    while (resultSet.next()) {
                        System.out.print(resultSet.getInt("id") + ": ");
                        System.out.println(resultSet.getString("name"));
                    }
                }
            }
        }

  再贴上输出结果:

技术分享图片

显而易见,从数据库取出的值在ResultSet中就被修改了,并且也被插入了一条新的数据。

1、在最后打印出所有的值之前有一行代码

resultSet.beforeFirst();

这行代码的作用是把ResultSet的游标移动到结果集第一行之前,这样子调用next()方法可以让游标下移进行读取下一行的数据。显而易见,在设置ResultSet.TYPE_SCROLL_SENSITIVE之前我们访问结果集只能够从头到尾访问,而现在我们可以随意的异动游标访问任一行.

2、再看修改数据的那一段代码,

                        resultSet.updateString("name", "我是修改过的");
                        resultSet.updateRow();

我们修改数据是使用updateXXX()方法进行修改,相应的还有updateInt()、updateBytes()、updateTime()等相对应的方法。

而在修改完成之后需要调用updateRow()方法,该方法会提交我们对这一行结果集的修改,需要注意的是如果我们没有提交对这一行的修改而继续访问下一行,那我们的修改就会作废。

3、看插入数据的那一段代码:

                    resultSet.moveToInsertRow();
                    resultSet.updateString("name", "我是插入的");
                    resultSet.insertRow();

执行插入操作的话需要先调用 moveToInsertRow() 方法把游标移动到特定的位置(我们无法控制插入的位置),之后再执行插入操作插入需要插入的column(我设计的表只有两个column:id和name,id是自动增长的,所以我只需要插入name)

在插入需要插入的column之后,需要调用insertRow()方法将新建的行发送给数据库,这才算是完成了插入操作。

4、我们其实还可以使用deleteRow()方法来进行删除当前游标所指定的行。

JDBC API 可滚动可编辑的结果集

标签:column   访问   方法   from   链接   es2017   设计   sys   exe   

原文地址:http://www.cnblogs.com/heisehenbai/p/7886556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!