Resulta do Banco de Dados

E ae galera blz

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?

Também nãoé estranho as variaveis públicas mas com métodos gets ?

Eae galera blz!

Então valeu pela força que vcs estão me dando.
Bom estoiu estudando e preciso aprender o raci0nal disse o seguinte:

No caso como deveria ser feito? Deve ser um erro de concordância eu acho? vc poderia me explicar?

E o Zeed01 disse:

Poderia me explicar também?
Sou novo nisso e gostaria de entender.
Obrigado

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”.

Entendi! Então no caso esse código que postei acima deveria ficar 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 
 {
     private String usuario;
     private String senha;
     private String logado;
     private String nivel_logado;
     private String cargo_logado;
     private String codigo_logado;
     
     private ResultSet rs;
     private Connection conn;
     private Statement sql;
     
     public DAOLogin() throws SQLException, IOException
     {
         conn = Conexao.connect();
     }
     
     public void setDados(String setUsuario, String setSenha) throws SQLException, IOException
     {
         usuario = setUsuario;
         senha = setSenha;
         
         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;
     }
 }

Certo acredito que seja isso? Ou ainda não entendi?

extao. agora aparentemente está correta a classe.

blz então
Valeu pela força pessoal, aprendi legal com esse post

at+