Connecting JdbcRowSet with a Predefined ResultSet Object

This section describes how to connect a JdbcRowSet object to a database server with a predefined ResultSet object.

Another way to connect a JdbcRowSet object to a database server is to pass a predefined ResultSet object to the JdbcRowSetImpl constructor. Here is a sample sequence of method calls:

// Create a Connection object
  Connection con = DriverManager.getConnection("connection_url");

// Execute a SQL statement to generate a Result object
  Statement sta = con.createStatement();
  ResultSet res = sta.executeQuery("SQL_statement");

// Creating a JdbcRowSet object with a connection object
  JdbcRowSet jrs = new JdbcRowSetImpl(res);

// Ready to retrieve column values
  jrs.next();
  String val = jrs.getString(1)

Here is a sample program that connects a JdbcRowSet object to MySQL server with a predefined ResultSet object:

/* MySqlRowSetResultSet.java
 * Copyright (c) HerongYang.com. All Rights Reserved.
 */
import java.sql.*;
public class MySqlRowSetResultSet {
  public static void main(String [] args) {
    Connection con = null;
    try {

// Create a Connection object
      con = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/HerongDB?"
        +"user=Herong&password=TopSecret");

// Execute a SQL statement to generate a Result object
      Statement sta = con.createStatement();
      ResultSet res = sta.executeQuery("SELECT 'Hello world!'");

// Pass the Connection object to the new JdbcRowSet object
      javax.sql.rowset.JdbcRowSet jrs
        = new com.sun.rowset.JdbcRowSetImpl(res);

// Get the result
      jrs.next();
      System.out.println("Result: "+jrs.getString(1));

// Close resources
      jrs.close();
      res.close();
      sta.close();
      con.close();
    } catch (Exception e) {
      System.err.println("Exception: "+e.getMessage());
    }
  }
}

Try to compile it with JDK 13, I got an error:

herong> javac -cp .:mysql-connector-java.jar \
   MySqlRowSetResultSet.java

MySqlRowSetResultSet.java:21: error: package com.sun.rowset is not visible
   = new com.sun.rowset.JdbcRowSetImpl(res);
                     ^
(package com.sun.rowset is declared in module java.sql.rowset, which
does not export it)

Too bad, the com.sun.rowset.JdbcRowSetImpl class is hiding inside the java.sql.rowset module now since JDK 9. Passing a predefined connection object to the JdbcRowSetImpl constructor is not an option anymore.

The above program works fine with JDK 8:

herong> javac MySqlRowSetResultSet.java

MySqlRowSetResultSet.java:21: warning: JdbcRowSetImpl is internal
proprietary API and may be removed in a future release
        = new com.sun.rowset.JdbcRowSetImpl(res);
                            ^
herong> java -cp .:mysql-connector-java-5.1.36-bin.java \
   MySqlRowSetResultSet

Result: Hello world!

Table of Contents

 About This Book

 JDBC (Java Database Connectivity) Introduction

 JDK (Java SE) Installation

 MySQL Installation on Windows

 MySQL JDBC Driver (MySQL Connector/J)

 MySQL - PreparedStatement

MySQL - Reference Implementation of JdbcRowSet

 Overview of RowSet Objects

 Connecting JdbcRowSet to Database Servers

 Sun Implementation of JdbcRowSet API

 Connecting JdbcRowSet with a Connection URL

 Connecting JdbcRowSet with a Predefined Connection Object

Connecting JdbcRowSet with a Predefined ResultSet Object

 Connecting JdbcRowSet with JNDI Directory Service

 JdbcRowSet Query Statement with Parameters

 Inserting Rows with JdbcRowSet Objects

 MySQL - JBDC CallableStatement

 MySQL CLOB (Character Large Object) - TEXT

 MySQL BLOB (Binary Large Object) - BLOB

 Using Connection Pool with JDBC

 Archived Tutorials

 References

 Full Version in PDF/EPUB