jdbc resultset how use java resultset retrieve data
Este tutorial explica como usar JDBC ResultSet para recuperar dados. Também aprenderemos sobre as interfaces ResultSetMetaData e DatabaseMetaData com exemplos:
No JDBC DriverManager tutorial do Série de tutoriais JDBC , aprendemos como usar o JDBC DriverManager e seus métodos, JDBC PreparedStatement em aplicativos Java.
Neste tutorial, discutiremos as interfaces restantes em JDBC. Abordamos as interfaces Statement, PreparedStatement e CallableStatement em nossos tutoriais anteriores.
Aqui, aprenderemos sobre as interfaces JDBC ResultSet, ResultSetMetaData e DatabaseMetaData, seus métodos e como usar os métodos no programa Java.
O que você aprenderá:
Interface JDBC ResultSet
A interface ResultSet está presente no pacote java.sql. É usado para armazenar os dados que são retornados da tabela do banco de dados após a execução das instruções SQL no Programa Java. O objeto de ResultSet mantém o ponto do cursor nos dados de resultado. Por padrão, o cursor se posiciona antes da primeira linha dos dados de resultado.
O método next () é usado para mover o cursor para a próxima posição em uma direção para frente. Ele retornará FALSE se não houver mais registros. Ele recupera dados chamando o método executeQuery () usando qualquer um dos objetos de instrução. Pode ser um objeto Statement, PreparedStatement ou CallableStatement. As interfaces PreparedStatement e CallableStatement são as subinterfaces da interface de instrução.
Interface de declaração
Statement statemnt1 = conn.createStatement(); ResultSet rs1 = statemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Interface PreparedStatement
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”);
Podemos usar o método getX () para obter os dados das colunas enquanto iteramos pelos resultados, onde X - é o tipo de dados da coluna. Podemos usar Nomes de Colunas ou Índice para obter os valores usando os métodos getX ().
while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
Também podemos mencionar o número do índice da coluna em vez do nome da coluna nos métodos getX ().
while(rs1.next()) { int empNum = rs1.getInt(1); String lastName = rs1.getString(2); String firstName = rs1.getString(3); String email = rs1.getString(4); String deptNum = rs1.getString(5); String salary = rs1.getString(6); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); }
Tipos ResultSet
Por padrão, podemos iterar os dados / valores em ResultSet que retornaram como uma saída da instrução SQL executada na direção para frente. Podemos iterar os valores em outras direções usando o ResultSet rolável. Podemos especificar o tipo e a simultaneidade de ResultSet enquanto criamos os objetos Statement, PreparedStatement e CallableStatement.
Existem 3 tipos de ResultSet. Eles estão:
- TYPE_FORWARD_ONLY: É a opção padrão, onde o cursor se move do início ao fim, ou seja, na direção para frente.
- TYPE_SCROLL_INSENSITIVE: Nesse tipo, fará com que o cursor se mova nas direções para frente e para trás. Se fizermos quaisquer alterações nos dados durante a iteração dos dados armazenados, não será atualizado no conjunto de dados se alguém alterar os dados no banco de dados. Porque o conjunto de dados possui os dados do momento em que a consulta SQL retorna os dados.
- TYPE_SCROLL_SENSITIVE: É semelhante a TYPE_SCROLL_INSENSITIVE, a diferença é se alguém atualiza os dados após a consulta SQL ter retornado os dados, enquanto a iteração refletirá as alterações no conjunto de dados.
ResultSet Concurrency
Existem 2 modos de simultaneidade no ResultSet. Eles estão:
- ResultSet.CONCUR_READ_ONLY: É o modo de simultaneidade padrão. Podemos apenas ler os dados no ResultSet. A atualização não é aplicável.
- ResultSet.CONCUR_UPDATABLE: Podemos atualizar os dados no objeto ResultSet.
Alguns bancos de dados não oferecem suporte ao modo de simultaneidade para todos os tipos de ResultSet. Nesse caso, precisamos verificar se eles suportam nosso tipo desejado e modo de simultaneidade usando o método supportedResultSetConcurrency ().
Métodos na interface ResultSet
Existem 4 categorias de métodos ResultSet. Eles estão:
- Métodos de Navegação
- Métodos Getter
- Métodos Setter
- Métodos Diversos
Primeiro, discutiremos os métodos de navegação e, em seguida, prosseguiremos.
# 1) Métodos de navegação
Este método é usado para mover o cursor ao redor do conjunto de dados.
- Absoluto booleano (linha interna): É usado para mover o cursor para a linha especificada que é mencionada no parâmetro e retornar verdadeiro se a operação for bem-sucedida, caso contrário, retornará falso.
- Vazio afterLast (): Isso faz com que o cursor ResultSet se mova após a última linha.
- Anulado antes do primeiro (): Isso faz com que o cursor ResultSet se mova antes da primeira linha.
- Primeiro booleano (): Isso faz com que o cursor ResultSet se mova para a primeira linha. Retorna True se a operação for bem-sucedida, senão False.
- Último booleano (): Isso faz com que o cursor ResultSet se mova para a última linha. Retorna True se a operação for bem-sucedida, senão False.
- Próximo booleano (): Isso faz com que o cursor ResultSet se mova para a próxima linha. Retorna True se houver mais registros e False se não houver mais registros.
- Booleano anterior (): Isso faz com que o cursor ResultSet se mova para a linha anterior. Retorna True se a operação for bem-sucedida, senão False.
- Relativo booleano (): Ele move o cursor para um determinado número de linhas na direção para frente ou para trás.
- Int getRow (): Ele retorna o número da linha atual que o objeto ResultSet está apontando agora.
- Void moveToCurrentRow (): Ele move o cursor de volta para a linha atual se ele estiver na linha de inserção.
- Void moveToInsertRow (): Ele move o cursor para a linha específica para inserir a linha no Banco de Dados. Ele lembra a localização atual do cursor. Portanto, podemos usar o método moveToCurrentRow () para mover o cursor para a linha atual após a inserção.
Neste tutorial, todos os programas são escritos em Java. Usamos a versão Java 8 e Oracle DB.
>> Você pode baixar o software Oracle em aqui
>> Você pode baixar o Java versão 8 em aqui
Possui o processo de instalação do Java passo a passo.
Programa de exemplo JDBC ResultSet: (usando métodos de navegação)
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ResultSet_Example { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select query String select_query = 'select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:X E')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll sensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet. CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(); //Moving the cursor to point first row rs.first(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point before first row rs.beforeFirst(); System.out.println('Cursor is pointing at before the first row. Use next() to move in forward direction'); //Moving the cursor to point first row using next() rs.next(); System.out.println('FIRST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point after last row rs.afterLast(); System.out.println('Cursor is pointing at after the last row. Use previous() to move in backward direction'); //Moving the cursor to point last row using previous() rs.previous(); System.out.println('LAST ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point third row rs.absolute(3); System.out.println('Cursor is pointing at 3rd row'); System.out.println('THIRD ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point previous row of third row rs.relative(-1); System.out.println('Cursor is pointing to the 1 row previous to the 3rd row'); System.out.println('Second ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point 4th row after the 2nd row rs.relative(4); System.out.println('Cursor is pointing to the 4th row after the 2nd row'); System.out.println('SIXTH ROW
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point current row System.out.println(' Current Row = ' + rs.getRow()); } } catch (SQLException e) { e.printStackTrace(); } } }
RESULTADO:
Dados na tabela Employee_details
Explicação:
No programa acima, implementamos os métodos first (), last (), beforeFirst (), afterLast (), next (), previous (), absolute (), relative () e getRow () em ResultSet. Para usar esses métodos, definimos os valores ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE no método prepareStatement.
A seguir, discutiremos quais são os métodos Getter em ResultSet:
# 2) Métodos de obtenção
ResultSet armazenou os dados da tabela do banco de dados. Os métodos getter são usados para obter os valores da tabela em ResultSet. Para isso, precisamos passar o valor do índice da coluna ou o nome da coluna.
A seguir estão os métodos getter em ResultSet:
- int getInt (int ColumnIndex): É usado para obter o valor do índice da coluna especificada como um tipo de dados int.
- float getFloat (int ColumnIndex): É usado para obter o valor do índice da coluna especificada como um tipo de dados flutuante.
- java.sql.date getDate (int ColumnIndex): É usado para obter o valor do Índice da coluna especificada como um valor de data.
- int getInt (String ColumnName): É usado para obter o valor da coluna especificada como um tipo de dados int.
- float getFloat (String ColumnName): É usado para obter o valor da coluna especificada como um tipo de dados flutuante.
- Java.sql.date getDate (String ColumnName): É usado para obter o valor da coluna especificada como um valor de data.
Existem métodos getter para todos os tipos de dados primitivos (Boolean, long, double) e String também na interface ResultSet. Podemos obter um array e tipos binários de dados também do banco de dados. Também tem métodos para isso.
# 3) Métodos Setter / Updater
Podemos atualizar o valor no banco de dados usando métodos do atualizador ResultSet. É semelhante aos métodos Getter, mas aqui precisamos passar os valores / dados para a coluna específica para atualizar no banco de dados.
A seguir estão os métodos de atualização no ResultSet:
- void updateInt (int ColumnIndex, int Value): É usado para atualizar o valor do índice da coluna especificada com um valor int.
- void updateFloat (int ColumnIndex, float f): É usado para atualizar o valor do índice da coluna especificada com o valor flutuante.
- void updateDate (int ColumnIndex, Date d): É usado para atualizar o valor do índice da coluna especificada com o valor da data.
- void updateInt (String ColumnName, int Value): É usado para atualizar o valor da coluna especificada com o valor int fornecido.
- void updateFloat (String ColumnName, float f): É usado para atualizar o valor da coluna especificada com o valor flutuante fornecido.
- Java.sql.date getDate (String ColumnName): É usado para atualizar o valor da coluna especificada com o valor de data fornecido.
Existem métodos Updater para todos os tipos de dados primitivos (Boolean, long, double) e String também na interface ResultSet.
Os métodos de atualização apenas atualizam os dados no objeto ResultSet. Os valores serão atualizados no DB após chamar o método insertRow ou updateRow.
Atualizando uma linha:
Podemos atualizar os dados em uma linha chamando os métodos updateX (), passando o nome da coluna ou índice e os valores a serem atualizados. Podemos usar qualquer tipo de dados no lugar de X no método updateX. Até agora, atualizamos os dados no objeto ResultSet. Para atualizar os dados no DB, temos que chamar o método updateRow ().
Inserindo uma linha:
Precisamos usar moveToInsertRow () para mover o cursor e inserir uma nova linha. Já cobrimos isso na seção Métodos de navegação. Em seguida, precisamos chamar o método updateX () para adicionar os dados à linha. Devemos fornecer dados para todas as colunas, caso contrário, usaremos o valor padrão dessa coluna em particular.
Depois de atualizar os dados, precisamos chamar o método insertRow (). Em seguida, use o método moveToCurrentRow (), para levar a posição do cursor de volta à linha em que estávamos antes de começarmos a inserir uma nova linha.
Exemplo ResultSet:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ResultSet_Example1 { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub String select_query = 'select empnum,lastName,firstName from employee_details'; String insert_query = 'insert into employee_details values(?,?,?,?,?,?)'; Class.forName('oracle.jdbc.driver.OracleDriver'); //Connecting to Oracle DB try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { //Creating DatabaseMetaData object DatabaseMetaData dbmd = conn.getMetaData(); //Checking whether the driver supports scroll insensitive type and concur updatable boolean isSupportResultSetType = dbmd.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); if(isSupportResultSetType == true) { // Creating prepared Statement PreparedStatement pstatemnt1 = conn.prepareStatement(select_query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstatemnt1.executeQuery(select_query); //Moving the cursor to point last row of the table rs.last(); System.out.println('LAST ROW: Before inserting new Employee'); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); // Setting the values to insert in the EMPLOYEE_DETAILS Table //Moving the cursor to point insert a row to table rs.moveToInsertRow(); //Update EMPNUM value rs.updateInt(1, 1017); //Update LAST NAME value rs.updateString(2, 'Bond'); //Update FIRST NAME value rs.updateString(3, 'James'); //Insert a new row rs.insertRow(); //Moving the cursor to point 5th row rs.absolute(5); System.out.println('Befor Updating EMPNUM of the 5th ROW'); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); System.out.println(' Updating EMP id of the 5th EMPLOYEE'); //Updating EMPNUM of 5th row rs.updateInt(1,3005); rs.updateRow(); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); //Moving the cursor to point last row rs.last(); System.out.println('LAST ROW: EMPNUM = ' + rs.getInt(1)); System.out.println('
EMP NUM = ' + rs.getInt('empNum') + '
LAST NAME = '+ rs.getString(2)+'
FIRST NAME = ' + rs.getString(3)); } } catch (SQLException e) { e.printStackTrace(); } } }
RESULTADO:
Explicação:
No programa acima, o que fizemos primeiro foi armazenar os dados da tabela Employee_details no objeto ResultSet usando a consulta SELECT. Em seguida, exibimos os dados da última linha na tabela employee_details usando o método last () de ResultSet. O método moveToInsertRow () faz com que o cursor aponte a linha atual, agora a linha atual é a última linha.
Os métodos updateXXX () usados para atualizar os valores para a linha e o método insertRow () inseriu os dados em uma nova linha. Usando o método absolute (), fizemos o cursor apontar para o 5ºfileira. O método UpdateInt () foi usado para atualizar o EMPNUM com um novo id de 5ºempregado na mesa. Depois disso, são exibidos os dados para verificar se o EMPNUM está atualizado ou não.
Fez o cursor apontar para a última linha da tabela usando last () e exibiu-o. Para realizar a lógica acima, precisamos definir os valores ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE no método prepareStatement.
# 4) Métodos diversos
- void close (): É usado para fechar a instância ResultSet e liberar os recursos associados à instância ResultSet.
- ResultSetMetaData getMetaData (): Ele retorna a instância ResultSetMetaData. Ele contém as informações sobre o tipo e a propriedade das colunas da saída da consulta. Aprenderemos mais sobre ResultSetMetaData na próxima seção.
ResultSetMetaData
O que são metadados?
Metadados significam dados sobre dados. Usando essa interface, obteremos mais informações sobre ResultSet. Ele está disponível no pacote java.sql. Cada objeto ResultSet está associado a um objeto ResultSetMetaData.
Este objeto terá os detalhes das propriedades das colunas como tipo de dados da coluna, nome da coluna, número de colunas, nome da tabela, nome do esquema, etc. Podemos obter o objeto ResultSetMetaData usando o método getMetaData () de ResultSet.
Sintaxe do ResultSetMetaData:
PreparedStatement pstatemnt1 = conn.prepareStatement(insert_query); ResultSet rs1 = pstatemnt1.executeQuery(“Select * from EMPLOYEE_DETAILS”); ResultSetMetaData rsmd = rs.getMetaData();
Métodos importantes de interface ResultSetMetaData:
Nome do Método | Descrição |
---|---|
boolean isCaseSensitive (int Column) | Retorna verdadeiro se a coluna fornecida diferencia maiúsculas de minúsculas, caso contrário, é falso |
String getColumnName (coluna int) | Ele retorna o nome da coluna da coluna particular |
String getColumnTypeName (coluna int) | Ele retorna o tipo de dados da coluna particular que passamos como um parâmetro |
String getTableName (coluna int) | Retorna o nome da tabela da coluna |
String getSchemaName (coluna int) | Ele retorna o nome do esquema da tabela da coluna |
int getColumnCount () | Ele retorna o número de colunas do ResultSet |
boolean isAutoIncrement (int Column) | Retorna verdadeiro se a coluna fornecida é de incremento automático, caso contrário, é falso |
ResultSetMetaData Exemplo
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class ResultSetMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub String QUERY= ' select * from employee_details'; Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; rs1 = statemnt1.executeQuery(QUERY); ResultSetMetaData rsmd = rs1.getMetaData(); System.out.println(' We are using ResultSetMetaData '); System.out.println('No: of Columns: '+ rsmd.getColumnCount()); System.out.println('ColumnName of Column 1: '+ rsmd.getColumnName(1)); System.out.println('Data Type of Column 2: ' + rsmd.getColumnTypeName(2)); System.out.println('Table Name of the Column 1: ' + rsmd.getTableName(1)); System.out.println('Schema Name of the Column 1: ' + rsmd.getSchemaName(1)); } } }
RESULTADO:
Explicação:
ferramenta de reparo de erros para windows 10
No programa acima, implementamos os métodos getColumnCount (), getColumnName (), getColumnTypeName (), getTableName () e getSchemaName () na interface ResultSetMetaData.
DatabaseMetaData
A interface DatabaseMetaData fornece informações sobre o banco de dados, como DatabaseName, versão do banco de dados e assim por diante.
Métodos importantes de interface DatabaseMetaData:
Nome do Método | Descrição |
---|---|
String getStringFunctions () | Ele retorna a lista de funções de string disponíveis no banco de dados conectado |
String getDriverName () | Ele retornará o nome do driver JDBC que estamos usando em nosso programa Java |
String getDriverVersion () | Ele retorna o número da versão do driver JDBC |
String getUserName () | Ele retorna o nome de usuário do banco de dados que estamos usando |
String getDatabaseProductName () | Ele retorna o nome do banco de dados que estamos usando |
String getDatabaseProductVersion () | Ele retorna o número da versão do banco de dados que estamos usando |
ResultSet getSchemas () | Retorna os nomes dos esquemas disponíveis no banco de dados conectado |
String getTimeDateFunctions () | Ele retorna a lista de funções de hora e data disponíveis no banco de dados conectado |
String getURL () | Ele retorna a URL para o banco de dados |
Boolean isReadOnly () | Ele retorna se o banco de dados está em modo somente leitura |
Boolean supportBatchUpdates () | Ele retorna se o banco de dados suporta atualizações em lote |
Boolean suportaSavepoints () | Ele retorna se o banco de dados suporta pontos de salvamento |
Boolean supportedStatementPooling () | Ele retorna se o banco de dados suporta o pool de instruções |
Boolean supportStoredProcedures () | Ele retorna se o banco de dados suporta procedimentos armazenados |
Boolean suportaOuterJoins () | Ele retorna se o banco de dados suporta junção externa |
Aqui, listamos alguns métodos importantes da interface DatabaseMetaData. Você pode consultar o site oficial do Oráculo onde você pode ver todos os métodos disponíveis na interface DatabaseMetaData.
Exemplo de DatabaseMetaData:
package com.STH.JDBC; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class DatabaseMetaData_Example { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Class.forName('oracle.jdbc.driver.OracleDriver'); Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); DatabaseMetaData dbmd = conn.getMetaData(); System.out.println('Using DatabaseMetaData'); System.out.println('Driver Name: ' + dbmd.getDriverName()); System.out.println('Driver Version: '+ dbmd.getDriverVersion()); System.out.println('UserName of the Database: ' + dbmd.getUserName()); System.out.println('Database Product Name:' + dbmd.getDatabaseProductName()); System.out.println('Database Product Version: ' + dbmd.getDatabaseProductVersion()); System.out.println('List of String Functions in the Database: ' + dbmd.getStringFunctions()); System.out.println('List of Time & Date functions in the Database: ' + dbmd.getTimeDateFunctions()); System.out.println('URL of the Database: ' + dbmd.getURL()); System.out.println('Database is read - only? ' +dbmd.isReadOnly()); System.out.println('Support Batch Updates? ' + dbmd.supportsBatchUpdates()); System.out.println('Support savepoints? ' + dbmd.supportsSavepoints()); System.out.println('Support Statement Pooling? '+ dbmd.supportsStatementPooling()); System.out.println('Support Stored Procedures? ' + dbmd.supportsStoredProcedures()); System.out.println('Support Outer Join? '+ dbmd.supportsOuterJoins()); } }
RESULTADO:
Explicação:
No programa acima, usamos / implementamos getDriverName (), getDriverVersion (), getUserName (), getDatabaseProductName (), getDatabaseProductVersion (), getStringFunctions (), getTimeDateFunctions (), getURL (), isReadOnly (), supportedBatch , oferece suporte a StatementPooling (), suporteSavepoints (), suporteStoredProcedures () e suporte aos métodos OuterJoins () na interface DatabaseMetaData
Pontos a serem observados:
- A interface JDBC ResultSet é usada para armazenar os dados do banco de dados e usá-los em nosso programa Java.
- Também podemos usar ResultSet para atualizar os dados usando os métodos updateXXX ().
- O objeto ResultSet aponta o cursor antes da primeira linha dos dados de resultado. Usando o método next (), podemos iterar por meio do ResultSet.
- Temos métodos de navegação de ResultSet para avançar no objeto ResultSet
- ResultMetaData é usado para obter mais informações sobre o ResultSet, como nome da coluna, número de colunas, tipo de dados da coluna, etc.
- DatabaseMetData é usado para obter as informações sobre o banco de dados que conectamos
perguntas frequentes
Q # 1) Qual é o uso do ResultSet?
Responda: ResultSet é usado para armazenar e recuperar os dados do banco de dados. Quando o método executeQuery () for executado, ele retornará o objeto ResultSet. Podemos usar esse objeto ResultSet em nosso programa para realizar a lógica.
Q # 2) Como verificar se o ResultSet está vazio ou não?
Responda: Não há métodos predefinidos como length (), size () disponíveis para verificar o IsResultSet Empty. Podemos usar o método next () para iterar e se retornar True, então não está vazio, se retornar False significa que o ResultSet está vazio.
P # 3) É possível que ResultSet seja nulo?
Responda: Não, o método executeQuery () retorna o objeto ResultSet que nunca pode ser nulo.
P # 4) O que é ResultSet atualizável?
Responda: Um objeto ResultSet atualizável é usado para atualizar os dados na coluna, inserir dados nas colunas e excluir linhas. Para tornar um ResultSet atualizável, precisamos tornar o tipo de rolagem como sensível ou insensível e o tipo CONCUR como atualizável.
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE.
P # 5) Como obter o nome do banco de dados que foi conectado?
Responda: Podemos usar o método getDatabaseProductName () do objeto DatabaseMetaData.
Conclusão
Neste tutorial, discutimos quais são as interfaces ResultSet, ResultSetMetaData e DatabaseMetaData e seus métodos importantes comumente usados nos programas JDBC. Também vimos como atualizar dados no banco de dados usando ResultSet. ResultSetMetadata contém informações sobre ResultSet, como nome da coluna, contagem da coluna e assim por diante.
DatabaseMetaData contém informações do banco de dados.
Leitura recomendada
- JDBC DriverManager, JDBC PreparedStatement And Statement
- Tutorial Java JDBC: O que é JDBC (Java Database Connectivity)
- Gerenciamento de transações Java JDBC com exemplo
- Processamento em lote JDBC e Tutorial de procedimento armazenado
- Tutorial de conexão Java JDBC com exemplo de programação
- Interfaces comparáveis e comparadoras em Java
- Teste de banco de dados Selenium (usando WebDriver e API JDBC)
- Tratamento de exceções JDBC - Como tratar exceções SQL