Consultar uma base de dados significa pesquisar através dos seus dados. Você faz isso enviando instruções SQL para a base de dados. Para fazer isso, você primeiro precisa de uma conexão de banco de dados aberta. Uma vez que você tenha uma conexão aberta, você precisa criar um objeto Statement
, como este:
Statement statement = connection.createStatement();
Uma vez que você tenha criado o objeto Statement
você pode usá-lo para executar consultas SQL, como este:
String sql = "select * from people";ResultSet result = statement.executeQuery(sql);
Quando você executa uma consulta SQL você recebe de volta um objeto ResultSet
. O ResultSet
contém o resultado da sua consulta SQL. O resultado é retornado em filas com colunas de dados. Você itera as linhas do ResultSet
assim:
while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}
O método ResultSet.next()
move-se para a próxima linha no ResultSet
, se houver mais linhas. Se houver mais filas, ele retorna verdadeiro. Se não houver mais linhas, ele retornará falso.
Você precisa ligar para next()
pelo menos uma vez antes de poder ler qualquer dado. Antes do primeiro next()
chamar o ResultSet
é posicionado antes da primeira linha.
Você pode obter dados da coluna para a linha atual chamando alguns dos métodos getXXX()
, onde XXX é um tipo de dado primitivo. Por exemplo:
result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.
O nome da coluna para obter o valor de é passado como parâmetro para qualquer um destes getXXX()
chamadas de método.
Você também pode passar um índice da coluna, em vez disso:
result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.
Para que isso funcione você precisa saber qual índice uma determinada coluna tem no ResultSet
. Você pode obter o índice de uma dada coluna chamando o método ResultSet.findColumn()
, assim:
int columnIndex = result.findColumn("columnName");
Se iterar grandes quantidades de linhas, referenciar as colunas pelo seu índice pode ser mais rápido do que pelo seu nome.
Quando terminar de iterar o ResultSet
você precisa fechar tanto o objeto ResultSet
como o objeto Statement
que o criou (se você tiver terminado com ele, isto é). Você fá-lo chamando os seus métodos close()
, como este:
result.close();statement.close();
Claro que deve chamar estes mehtods dentro de um bloco de finally
para se certificar que eles são chamados mesmo que ocorra uma excepção durante ResultSet
iteração.
Exemplo completo
Aqui está um exemplo de código de consulta completo:
Statement statement = connection.createStatement();String sql = "select * from people";ResultSet result = statement.executeQuery(sql);while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age);}result.close();statement.close();
E aqui está novamente o exemplo, com try-finally
blocos adicionados. Note que deixei de fora os blocos catch
para tornar o exemplo mais curto.
Statement statement = null;try{ statement = connection.createStatement(); ResultSet result = null; try{ String sql = "select * from people"; ResultSet result = statement.executeQuery(sql); while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age); } } finally { if(result != null) result.close(); }} finally { if(statement != null) statement.close();}