`

Java JDBC基础(三)

阅读更多

 

package com.yli.demo;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Statement测试[ResultSet可滚动可更新结果集]<br>
 * 可滚动:对ResultSet可向前向后定位<br>
 * 可更新:ResultSet数据修改后可提交至数据库
 */
public class ScrollStatementTest {
    
    public static void main(String[] args) {
        Test1();
    }
    
    /**
     * 测试可滚动,可更新的结果集ResultSet
     */
    public static void Test1() {
        try {
            Connection conn;
            conn = ConnectionUtil.getConnection();
            
            /**
             * 
             * ResultSet.TYPE_FORWARD_ONLY [结果集不可滚动]
             * ResultSet.TYPE_SCROLL_INSENSITIVE [结果集可滚动,且不可感知查询出来的数据是否有变化]
             * ResultSet.TYPE_SCROLL_SENSITIVE [结果集可滚动,可感知查询出来的数据是否有变化]
             * 
             * ResultSet.CONCUR_READ_ONLY[结果集只读]
             * ResultSet.CONCUR_UPDATABLE[结果集可更新至数据库]
             */
            
            // 创建[可滚动对数据更新不敏感]+[结果集可更新至数据库]的Statement
            Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            
            String sql = "select afficheid,affichetitle from ES_T_SHOP_AFFICHE";
            ResultSet rs = statement.executeQuery(sql);
            
            // 检查是否可支持是否支持滚动与更新
            DatabaseMetaData meta = conn.getMetaData();
            boolean isSupport = meta.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE);
            System.out.println("===========>isSupport=" + isSupport);
            
            long id;
            String title;
            int currentRow;
            boolean isAvailable;
            
            /**
             * 像使用数组一样使用结果集ResultSet
             * absolute(rowId) 定位到第几行
             * previous()   前一行数据
             * next()   后一行数据
             * getRow() 返回行号,如果返回0表示不可用:即在第一行之前或者最后一行之后
             * 
             * 如果当前一行已经在第一行,再回到前一行则返回false
             * 如果当前一行已经在最后一行,再回到后一行则返回false
             */
            
            // 定位到第1行数据[从1开始计算]
            isAvailable = rs.absolute(1);   // 同时返回值表示该行是否可用
            id = rs.getLong("afficheid");
            title = rs.getString("affichetitle");
            currentRow = rs.getRow();
            
            System.out.println("============>更新之前");
            System.out.println("============>是否可用:" + isAvailable);
            System.out.println("============>当前行号:" + currentRow);
            System.out.println("============>id:" + id);
            System.out.println("============>title:" + title);
            System.out.println();
            
            // 更改第一行数据[可更新]
            rs.updateString("affichetitle", "IT-EYE");  // ResultSet数据集已更新
            rs.updateLong("afficheid", id);  // ResultSet数据集已更新
            rs.updateRow();     // ResultSet更新提交至数据库
            
            id = rs.getLong("afficheid");
            title = rs.getString("affichetitle");
            currentRow = rs.getRow();
            
            System.out.println("============>更新之后");
            System.out.println("============>是否可用:" + isAvailable);
            System.out.println("============>当前行号:" + currentRow);
            System.out.println("============>id:" + id);
            System.out.println("============>title:" + title);
            System.out.println();
            
            
            // 定位到第5行数据
            isAvailable = rs.absolute(5);   // 同时返回值表示该行是否可用
            id = rs.getLong("afficheid");
            title = rs.getString("affichetitle");
            currentRow = rs.getRow();
            
            System.out.println("============>是否可用:" + isAvailable);
            System.out.println("============>当前行号:" + currentRow);
            System.out.println("============>id:" + id);
            System.out.println("============>title:" + title);
            System.out.println();
            
            // 定位到前一行
            isAvailable = rs.previous();   // 同时返回值表示该行是否可用
            
            id = rs.getLong("afficheid");
            title = rs.getString("affichetitle");
            currentRow = rs.getRow();
            
            System.out.println("============>是否可用:" + isAvailable);
            System.out.println("============>当前行号:" + currentRow);
            System.out.println("============>id:" + id);
            System.out.println("============>title:" + title);
            System.out.println();
            
            // 定位到后一行
            isAvailable = rs.next();
            
            id = rs.getLong("afficheid");
            title = rs.getString("affichetitle");
            currentRow = rs.getRow();
            
            System.out.println("============>是否可用:" + isAvailable);
            System.out.println("============>当前行号:" + currentRow);
            System.out.println("============>id:" + id);
            System.out.println("============>title:" + title);
            System.out.println();
            
            /**
             * 快捷方法
             * first() 回到第一行
             * isFirst() 是否在第一行
             * 
             * beforeFist() 回到第一行之前,那么getRow()其实为0,因为这一行前面肯定没数据
             * ifBeforeFirst() 是否在第一行之前
             * 
             * afterLast() 回到最后一行之后,那么getRow()其实为0,因为这一行后面肯定没数据
             * isAfterLast() 是否在第一行之前
             */
            
            boolean isFirst;
            boolean isLast;
            boolean ifBeforeFirst;
            boolean isAfterLast;
            
            // 定位到第一行
            isAvailable = rs.first();
            isFirst = rs.isFirst();
            isLast = rs.isLast();
            ifBeforeFirst = rs.isBeforeFirst();
            isAfterLast = rs.isAfterLast();
            
            id = rs.getLong("afficheid");
            title = rs.getString("affichetitle");
            currentRow = rs.getRow();
            
            System.out.println("============>是否可用:" + isAvailable);
            System.out.println("============>当前行号:" + currentRow);
            System.out.println("============>是否第一行:" + isFirst);
            System.out.println("============>是否第一行之前:" + ifBeforeFirst);
            System.out.println("============>是否最后一行:" + isLast);
            System.out.println("============>是否最后一行之后:" + isAfterLast);
            System.out.println("============>id:" + id);
            System.out.println("============>title:" + title);
            System.out.println();
            
            
            // 使用完毕之后ResultSet还是完整的ResultSet,跟数组一样
            // 仍然可以普通方法使用ResultSet
            while(rs.next()){
                // 正常从第一行读取,也可以使用updateRow()更新结果集
                // do...
            }
            
            ConnectionUtil.close(conn);
           
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

 

 

 

 

分享到:
评论

相关推荐

    java jdbc 需要包

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一组接口和类。它提供了一种标准化的方法,让程序员可以使用SQL语句访问数据库,而无需关心具体的数据库实现细节。在Java应用...

    Java jdbc

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与各种关系数据库进行交互的一组标准API。JDBC使得Java开发者能够编写...JDBC是Java开发数据库应用的基础,也是许多企业级框架(如Spring JDBC)的基石。

    Java JDBC规范和用例

    #### 三、JDBC的主要特性 JDBC以其高度一致性和简洁性著称,仅需几个关键接口即可实现数据库的基本操作。它的核心在于两个主要包:`java.sql` 和 `javax.sql`。 - **`java.sql`**:包含执行基本数据库操作所需的...

    java JDBC综合笔记

    JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的应用程序接口,它提供了一套统一的接口方法...通过这份笔记,读者可以掌握使用Java语言操作数据库的技能,为开发各类数据库应用打下坚实的基础。

    javaJDBC项目模板

    Java JDBC(Java Database Connectivity)是Java平台中用于与各种数据库进行交互的标准API,它使得Java开发者能够编写数据库无关的代码,实现对数据的增、删、改、查操作。本项目模板提供了两种不同阶段的JDBC应用...

    JAVA JDBC MYSQL连接源代码

    1. **JDBC API基础**: JDBC API包含一系列的接口和类,如`java.sql.DriverManager`、`Connection`、`Statement`、`PreparedStatement`、`ResultSet`等。`DriverManager`用于管理数据库驱动,`Connection`表示到...

    JAVAJDBC基础.pdf

    【JDBC基础】 JDBC(Java Database Connectivity)是Java编程语言中用于访问数据库的标准Java API,它允许Java开发者在程序中执行SQL语句并与各种数据库进行交互。JDBC为Java程序员提供了一种统一的方式来连接和操作...

    java jdbc连接sqlserver所需要的jar包

    了解了这些基础知识,你可以开始使用Java JDBC与SQL Server进行数据交互了。记住,安全性和性能优化是开发过程中的重要考虑因素,比如使用预编译的`PreparedStatement`防止SQL注入,以及及时关闭结果集和数据库连接...

    java jdbc测试mysql数据库

    本示例将讲解如何使用Java JDBC连接MySQL数据库,这对于任何Java开发者来说都是基础且重要的技能。 首先,我们需要在项目中引入MySQL的JDBC驱动。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml ...

    JAVAJDBC.rar_JAVAJDBC_jdbc学生管理_校园卡 java_校园卡 管理 系统

    1. **Java JDBC基础** - **JDBC API**: 包含了`java.sql`包下的接口和类,如`Connection`、`Statement`、`PreparedStatement`、`ResultSet`等,它们提供了与数据库通信的基本方法。 - **数据库连接**: `...

    javajdbc宠物商店-Mysql数据库_Java项目jdbc_java宠物项目_数据库代码_

    本项目"javajdbc宠物商店-Mysql数据库"是基于Java JDBC实现的一个宠物商店管理系统的数据库部分,它提供了与MySQL数据库交互的能力。在这个项目中,我们将深入探讨以下几个核心知识点: 1. **JDBC API**: JDBC API...

    java jdbc基础

    "Java JDBC基础教材 数据库操作基础知识 入门书籍"这个资源可能包含以下内容: 1. JDBC基础概念和原理介绍。 2. 如何配置JDBC驱动和连接数据库。 3. SQL语言的基本操作,如选择、插入、更新和删除数据。 4. 使用`...

    重难点之JAVAJDBC基础.pdf

    理解JDBC的基础对于任何Java开发者来说都是非常重要的,特别是在需要处理大量数据的场景中。 在数据库编程中,JDBC提供了以下核心功能: 1. **连接数据库**:JDBC允许Java应用程序通过`DriverManager.get...

    JAVA JDBC教程.zip_zip怎么打开

    ### JDBC基础 1. **JDBC驱动**:JDBC驱动是Java程序与数据库之间的桥梁,分为四种类型:Type 1(纯Java API,性能较低)、Type 2(混合Java和数据库供应商特定代码)、Type 3(完全基于网络的中间件)和Type 4(纯...

    JAVA数据库编程JDBC 与 Java数据库接口JDBC入门基础讲座 与 JDBC API数据库编程实作教材-程序设计-JAVA JDBC全压缩包.rar

    本压缩包包含了三个重要组成部分:《JAVA数据库编程JDBC》、《Java数据库接口JDBC入门基础讲座》以及《JDBC API数据库编程实作教材》。这些资源将帮助初学者全面理解和掌握JDBC的基础知识和实践技巧。 《JAVA数据库...

    JAVA—JDBC数据库查询小程序

    ### JDBC基础 JDBC(Java Database Connectivity)是JAVA平台中用于与各种数据库进行通信的标准API。它允许开发者使用JAVA编写代码来连接和操作数据库。JDBC由一系列接口和类组成,其中包括`DriverManager`、`...

    java JDBC连接数据库代码大全

    #### 一、JDBC基础概述 JDBC(Java Database Connectivity)是一种标准的Java API,允许Java程序连接并操作各种类型的数据库。它为开发人员提供了一种统一的方式,以便使用相同的API来访问不同的数据库管理系统。 ...

    Java-JDBC基础讲义参考

    Java-JDBC基础讲义参考

    JavaJDBC实验

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与数据库交互的一组接口和类,它提供了标准的方法来连接、查询和操作数据库。本实验旨在帮助初学者理解和掌握JDBC的基本用法,通过实际操作,让学习者...

    JAVA连接Mysql模板类之JDBC基础类

    java基础JDBC连接Mysql数据库。

Global site tag (gtag.js) - Google Analytics