Eu fiz a conexão do meu banco usando o PreparedStamente usei toda uma estrutura DAO que estudei com a galera aqui no fórum, esta tudo funcionando legal porém tenho uma dúvida por exemplo minha consulta no banco esta assim:
/*
* DAOLogin.java
*
* Created on 21 de Junho de 2007, 22:09
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package DAO;
import java.io.*;
import java.net.*;
import java.util.*;
import java.sql.*;
import conexao.Conexao;
/**
*
* @author alexandre
*/
public class DAOLogin
{
public String usuario;
public String senha;
public String logado;
public String nivel_logado;
public String cargo_logado;
public String codigo_logado;
public ResultSet rs;
public Connection conn;
public Statement sql;
public DAOLogin() throws SQLException, IOException
{
conn = Conexao.connect();
}
public void getDados(String getUsuario, String getSenha) throws SQLException, IOException
{
usuario = getUsuario;
senha = getSenha;
PreparedStatement sql = conn.prepareStatement("select * from senhadeals where usuario = ? and senha = ?");
sql.setString(1,usuario);
sql.setString(2,senha);
rs = sql.executeQuery();
while(rs.next())
{
logado = rs.getString("nome");
nivel_logado = rs.getString("nivel");
codigo_logado = rs.getString("codigo");
cargo_logado = rs.getString("cargo");
}
}
public String getLogado()
{
return logado;
}
public String getNivel()
{
return nivel_logado;
}
public String getCodigo()
{
return codigo_logado;
}
public String getCargo()
{
return cargo_logado;
}
}
essa linha: rs = sql.executeQuery(); executa a query e manda o resultado para rs. Aí eu uso um while para ler as linhas. Porém antes de varrer as linhas eu gostaria de saber se o rs realmente tem algum valor armazenado ou se a consulta ficou nula. Se a consulta ficou nula então eu não faço o whlie se tiver valor aí sim eu faço o while. Como eu faço isso?
try {
ResultSet res = sql.executeQuery();
while(res.next() ) {
//faz o que tem que fazer
}
}
catch(SQLException e) {
//faz o que tem que fazer
}
finally {
//faz o que tem que fazer
}
A própria condição do while já faz isso.
Quando você usa:
while (rs.next()) { }
Quer dizer que o conteúdo do laço só será executado enquanto for possível dar um next no ResultSet.
Caso o ResultSet não retorne nenhum valor (nenhum registro), não entrará dentro do laço.
Coloque dentro do laço:
System.out.println("Entrou no laço");
E você verá que não será escrito nada.
Só uma observação fora do assunto da pergunta… um método “void” com prefixo “get” ? Não querendo ser Pasquale do Java, mas é estranho, não?
O que eles estao querendo te explicar é sobre como proteger os atributos de sua classe.
Uma classe nao deve saber nada de outra classe, a nao ser aquilo que está exposto na sua interface publica. Do jeito que vc pos ai, public, eu poderia tentar algo como o seguinte:
DAO.usuario = “123456”;
mas vc nao quer que algo como essa string ai em cima seja passado pro atributo usuario da sua classe, quer? entao vc deixa os seus atributos como PRIVATE, e aqueles que realmente precisarem ser alterados vc fornece metodos set pra eles, setXXX, e getXXX…
os metodos SET fazem uma validação, se necessaria. vc pode no metodo set bloquear que um dado indesejado seja atribuido.
ja os metodos GET podem apenas retornar o valor, ou retornar algo que faça mais sentido pra outra classe. por exemplo, uma classe de Interface Grafica pode querer saber a dataNascimento do seu objeto Pessoa, mas em vez de vc passar o Date ou Timestamp, no seu metodo get vc pode usar um SimpleDateFormatter e passar já a String formatada no formato “dd/MM/yyyy”.