Não consigo utilizar o Connected RowSet - JdbcRowSet, erro no Driver

Pesquisei e não encontrei solução, se puderem me ajudar…O código é esse:

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

import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.RowSetProvider;

public class ConexaoFactory {
	
	public static JdbcRowSet getRowSetConnection() {
		String url = "jdbc:mysql://localhost:3306/agencia?useTimezone=true&serverTimezone=UTC"; 
		String user = "root";
		String password = "root";
		try {
			JdbcRowSet jdbcRowSet = RowSetProvider.newFactory().createJdbcRowSet();
			jdbcRowSet.setUrl(url);
			jdbcRowSet.setUsername(user);
			jdbcRowSet.setPassword(password);
			return jdbcRowSet;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void close(JdbcRowSet jrs) {
		try {
			if (jrs != null)
				jrs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
}

==========================================================================

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.sql.rowset.JdbcRowSet;

public class CompradorDB {

public static List<Comprador> searchByNameRowSet(String nome) {
        String sql = "SELECT id, nome, cpf FROM agencia.comprador where nome like ?";
        JdbcRowSet jrs = ConexaoFactory.getRowSetConnection();
        List<Comprador> compradorList = new ArrayList<>();
        try {
            jrs.setCommand(sql);
            jrs.setString(1, "%" + nome + "%");
            jrs.execute();
            while (jrs.next()) {
                compradorList.add(new Comprador(jrs.getInt("id"), jrs.getString("cpf"), jrs.getString("nome")));
            }
            ConexaoFactory.close(jrs);
            return compradorList;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

===========================================================================

O erro apresentado no console é esse:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/agencia?useTimezone=true&serverTimezone=UTC
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.rowset/com.sun.rowset.JdbcRowSetImpl.connect(Unknown Source)
at java.sql.rowset/com.sun.rowset.JdbcRowSetImpl.prepare(Unknown Source)
at java.sql.rowset/com.sun.rowset.JdbcRowSetImpl.execute(Unknown Source)
at br.com.abc.javacoree.ZZCjdbc.db.CompradorDB.searchByNameRowSet(CompradorDB.java:149)
at br.com.abc.javacoree.ZZCjdbc.test.TesteConexao.main(TesteConexao.java:26)
null

Obs:.
1 Estou usando o JDK 10
2 Engraçado que outros métodos que também usam o Driver como o searchByNameCallableStatement() por exemplo, funciona (Só retirei do tópico para não ficar comprido)

O erro diz que não é possível encontrar o driver do banco.

Você colocou ele? Se sim, onde?

Coloquei

Eu criei uma pasta “lib” no meu projeto e colei o “mysql-connector-java-8.0.9-rc-bin.jar” nela.

Depois fui em Build Path >> Configure Build Path >> Libraries >> Add External Jars e apontei para esse “mysql-connector-java-8.0.9-rc-bin.jar” da pasta “lib” que criei.

O que acho estranho é que outros métodos que utilizam o driver do banco, não acontece o erro.

Não precisa criar uma pasta lib

Fiz por uma questão de organização.

Mesmo assim, pegando esse driver de outro lugar (C:\Program Files\Java\jre-10.0.1\lib) apresentou o mesmo erro para o RowSet, porém outros métodos funcionam

A exception **no suitable driver found" indica que o driver foi encontrado, mas não e´compatível com o padrão de url definido para conexão. Em geral, esta exceção acontece por que define-se uma url de forma errada, como

jdbc;mysql://localhost:3306/banco  // ; ao invés de :
jdbc:mysql:/localhost:3306/banco // apenas uma /

E assim por diante.
Eu não gosto de usar nada diferente de

jdbc:mysql://localhost:3306/banco

Seria interessante testar ou verificar na documentação qual o padrão aceito para a versão que você está usando.

Testa com a url abaixo:

String url = "jdbc:mysql://localhost:3306/agencia?useSSL=false&&serverTimezone=UTC";
1 curtida

Também estou com o mesmo erro aqui desde que atualizei o JDK para o 10, e o MySQLConnector /J para o 8.

Os mesmos projetos que rodavam antes na JDK 8 e MySQLConnector/J 5.1.39 agora não rodam mais, mesmo com os novos jars devidamente adicionados e registrados no BuildPath.

Mas isso para RowSet. Quando uso DriverManager, Connection e ResultSet explicitamente funciona normal… com a mesma url.

Já tentei tudo que é parâmetro de url e não funciona.

A mesma url funciona para o DriverManager/Connection/ResultSet mas não para o ResultSet.

Acho que deva ser algum bug no jar do ResultSet do Java 10 (jrt-fs.jar : java.sql.javax.sql.RowSet.class).

Se alguém souber uma solução ou a causa, será de grande utilidade a informação.

Att,

Daniel Pinheiro.
danielpm1982@gmail.com