Enum + Java

Olá Pessoal,
Eu estou com um problema aqui,
já quebrei a cabeça e não estou conseguindo
arrumar um jeito de usar o Enum no Java

Eu tenho uma classe UsuarioSistema.java que usa um Enum:

public class UsuarioSistema {

    private int idUsuario;
    private String login;
    private String password;
    private TipoUsuario tipoUsuario;

    public UsuarioSistema(){

    }

    public UsuarioSistema(int id, String login, String password, 
            TipoUsuario tipoUsuario){
        this.idUsuario = id;
        this.login = login;
        this.password = password;
        this.tipoUsuario = tipoUsuario;
    }

    /**
     * @return the tipoUsuario
     */
    public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    /**
     * @param tipoUsuario the tipoUsuario to set
     */
    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }
    //TipoUsuario é ENUM
    //Não sei usar o ENUM direito???
    public enum TipoUsuario{
        PRODUTOR, TECNICO;
    }
...

E na classe UsuarioSistemaDao eu estou precisando
construir um método para listar os usuários:

public List<UsuarioSistema> listarUsuarioSistema() throws LAFQADaoException {

        PreparedStatement ps = null;
        ResultSet rs = null;
        UsuarioSistema tipoUsuario = new UsuarioSistema();

        try {
            ps = conn.prepareStatement("SELECT idUsuario, login, password_2, " +
                    "tipo_usuario FROM usuario_sistema");

            rs = ps.executeQuery();

            List<UsuarioSistema> list = new ArrayList<UsuarioSistema>();

            while (rs.next()) {

                int id = rs.getInt(1);
                String login = rs.getString(2);
                String password = rs.getString(3);
                //A partir daqui está dando Erro, não consigo passar um tipo de Usuario para o Construtor
                //O que eu devo fazer para conseguir passar o tipoUsuario que é um ENUM para o construtor 
                //UsuarioSistema???
                tipoUsuario = (UsuarioSistema.TipoUsuario.) rs.getObject(4);
                list.add(new UsuarioSistema(id, login, password, tipoUsuario));
            }

            return list;
        }
        catch (Exception sqle) {
            throw new LAFQADaoException(sqle);
        }
        finally {
            try {
                ConnectionFactory.closeconnection(conn, ps, rs);
            }
            catch (SQLException ex) {
                Logger.getLogger(UsuarioSistema.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }

O que eu devo fazer para conseguir passar o tipoUsuario que é um ENUM para o construtor
UsuarioSistema? Será que alguém poderia me ajudar?

[]'s.

Boa noite colega.

O erro está acontecendo apartir:

UsuarioSistemaDao: linha 23?

se você quiser passar os codigos para mim dar uma olhada!

Jóia allysson?

As minhas classes são essas:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model.BaseDados;

/**
 *
 * @author Ricardo Ramos
 */
public class UsuarioSistema {

    private int idUsuario;
    private String login;
    private String password;
    private TipoUsuario tipoUsuario;

    public UsuarioSistema(){

    }

    public UsuarioSistema(int id, String login, String password, 
            TipoUsuario usuario){
        this.idUsuario = id;
        this.login = login;
        this.password = password;
        this.tipoUsuario = usuario;
    }

    /**
     * @return the tipoUsuario
     */
    public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    /**
     * @param tipoUsuario the tipoUsuario to set
     */
    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    public enum TipoUsuario{
        PRODUTOR, TECNICO;
    }

    public int getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

e a outra classe

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import com.mysql.jdbc.Statement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.BaseDados.UsuarioSistema;
import model.BaseDados.UsuarioSistema.TipoUsuario;
import util.ConnectionFactory;

public class UsuarioSistemaDao {

    private Connection conn;
    private Statement stmt;
    
    public UsuarioSistemaDao() throws LAFQADaoException {
        try {
            this.conn = ConnectionFactory.getConnection();
        }
        catch (Exception e) {
            throw new LAFQADaoException("erro" + ":\n" + e.getMessage());
        }
    }

    
     public int salvarUsuarioSistema(UsuarioSistema usuario) throws LAFQADaoException {

        PreparedStatement ps = null;
        ResultSet rs = null;


        if (usuario == null)
            throw new LAFQADaoException("o valor passado não pode ser lido");

        try {

            String sql = "INSERT INTO usuario_sistema(login, password_2, tipo_usuario)"
                    + "VALUES(?,?,?)";


            ps = conn.prepareStatement(sql);
            ps.setString(1, usuario.getLogin());
            ps.setString(2, usuario.getPassword());
            ps.setString(3, usuario.getTipoUsuario().toString());
            ps.executeUpdate();
            stmt = (Statement) conn.createStatement();
            int autoIncKeyFromFunc = -1;
            rs = stmt.executeQuery("SELECT LAST_INSERT_ID() FROM usuario_sistema");

            if (rs.next()) {
                autoIncKeyFromFunc = rs.getInt(1);
            }
            else {
                throw new LAFQADaoException("Erro ao pegar a chave primaria");
            }

            rs.close();
            System.out.println("Key returned from " +
                               "'SELECT LAST_INSERT_ID()': " +
                               autoIncKeyFromFunc);
            return autoIncKeyFromFunc;
        }
        catch (Exception sqle) {
            sqle.printStackTrace();
            throw new LAFQADaoException("Erro ao inserir dados do usuário do Sistema" + sqle);
        }
        finally {
            try {
                ConnectionFactory.closeconnection(conn, ps);
            }
            catch (SQLException ex) {
                Logger.getLogger(UsuarioSistemaDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

      public void excluirUsuarioSistema(UsuarioSistema usuario) throws LAFQADaoException {

        PreparedStatement ps = null;

        if (usuario == null)
            throw new LAFQADaoException("O valor passado não pode ser nulo");

        try {
            ps = conn.prepareStatement("DELETE FROM usuario_sistema WHERE idUsuario=?");
            ps.setInt(1, usuario.getIdUsuario());
            ps.executeUpdate();
        }
        catch (SQLException sqle) {
            throw new LAFQADaoException("Erro ao excluir os dados do Usuario:" + sqle);
        }
        finally {
            try {
                ConnectionFactory.closeconnection(conn, ps);
            }
            catch (SQLException ex) {
                Logger.getLogger(UsuarioSistemaDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

      public void atualizarUsuarioSistema(UsuarioSistema usuario) throws LAFQADaoException {

        PreparedStatement ps = null;

        if (usuario == null)
            throw new LAFQADaoException("O valor passado não pode ser nulo");

        try {
            String sql = "UPDATE usuario_sistema SET login=?, password_2=?, tipo_usuario=? WHERE idUsuario=?";

            ps = conn.prepareStatement(sql);
            ps.setString(1, usuario.getLogin());
            ps.setString(2, usuario.getPassword());
            ps.setString(3, usuario.getTipoUsuario().toString());
            ps.setInt(4, usuario.getIdUsuario());
            ps.executeUpdate();
        }
        catch (Exception sqle) {
            throw new LAFQADaoException("Erro ao atualizar os dados do Usuario: " + sqle);
        }
        finally {
            try {
                ConnectionFactory.closeconnection(conn, ps);
            }
            catch (SQLException ex) {
                Logger.getLogger(UsuarioSistemaDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
     
      public List<UsuarioSistema> listarUsuarioSistema() throws LAFQADaoException {

        PreparedStatement ps = null;
        ResultSet rs = null;
        UsuarioSistema tipoUsuario = new UsuarioSistema();

        try {
            ps = conn.prepareStatement("SELECT idUsuario, login, password_2, " +
                    "tipo_usuario FROM usuario_sistema");

            rs = ps.executeQuery();

            List<UsuarioSistema> list = new ArrayList<UsuarioSistema>();

            while (rs.next()) {

                int id = rs.getInt(1);
                String login = rs.getString(2);
                String password = rs.getString(3);
                tipoUsuario = (UsuarioSistema.TipoUsuario.) rs.getObject(4);
                list.add(new UsuarioSistema(id, login, password, tipoUsuario));
            }

            return list;
        }
        catch (Exception sqle) {
            throw new LAFQADaoException(sqle);
        }
        finally {
            try {
                ConnectionFactory.closeconnection(conn, ps, rs);
            }
            catch (SQLException ex) {
                Logger.getLogger(UsuarioSistema.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }

    public UsuarioSistema procurarUsuarioSistema(int idUsuario) throws LAFQADaoException {

        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement("SELECT * FROM usuario_sistema WHERE idUsuario=?");
            ps.setInt(1, idUsuario);
            rs = ps.executeQuery();

            if (!rs.next()) {
                throw new Exception("Não foi encontrado nenhum"
                                    + "usuario com o código: " + idUsuario);
            }
            UsuarioSistema usuario = new UsuarioSistema();
            int id = rs.getInt(1);
            String login = rs.getString(2);
            String password = rs.getString(3);
            usuario = (UsuarioSistema) rs.getObject(4);

            return new UsuarioSistema(id, login, password, usuario);

        }
        catch (Exception sqle) {
            throw new LAFQADaoException(sqle);
        }
        finally {
            try {
                ConnectionFactory.closeconnection(conn, ps, rs);
            }
            catch (SQLException ex) {
                Logger.getLogger(UsuarioSistema.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }


}

Essa é a minha classe UsuarioSistemaDao e a parte que está com erro é a:

tipoUsuario = (UsuarioSistema.TipoUsuario.) rs.getObject(4);

No método para listar os usuários.
[]'s.

Allysson será que tem como você ou alguém me dar uma ajuda?

[]'s.

Dá um tempinho ai que vou ver o que posso fazer!

Aproveitando, dá uma estudada em Hibernate, é interessante para você, e você vai ver. Não é complicado!

Preciso dos códigos:

Enum: TipoUsuario
Class: ConnectionFactory

Valeu

Blz Allysson,
mas pra frente eu vou
ter que aprender a usar Hibernate mesmo
mas por enquanto eu estou usando o MySQl
mesmo. Eu estou pesquisando e estudando
aqui como que eu faço para usar o Enum
aqui no meu código.

[]'s.

O minha classe do ConnectionFactory está aqui:

package util;

import dao.*;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/*
 * Esta classe sera a nossa fabrica de conexões. ela cria a conexão
 * e retorna o resultado para quem a chamar, obsever que ela faz uso
 * de Produtordaoexception toda vez que ocorre um erro, alem disse ela possui
 * métodos de closeconnection para fechar a conexão, o statement e o resultset
 *
 */

public class ConnectionFactory {

    public static Connection getConnection() throws SQLException{

        try {
                Class.forName("com.mysql.jdbc.Driver");
                return DriverManager.getConnection("jdbc:mysql://localhost:3306/lafqa", "root", "85246710");

        } catch (Exception e) {

           throw new SQLException(e.getMessage());

        }

    }



    public static void closeconnection(Connection conn, PreparedStatement stmt, ResultSet rs)

            throws SQLException {

        close(conn, stmt, rs);

    }



    public static void closeconnection(Connection conn, PreparedStatement stmt)

            throws SQLException {

        close(conn, stmt, null);

    }



    public static void closeconnection(Connection conn)

            throws SQLException {

        close(conn, null, null);

    }


    private static void close(Connection conn, PreparedStatement stmt, ResultSet rs) throws SQLException {

        try {

            if (rs != null) {

                rs.close();

            }

            if (stmt != null) {
                
                stmt.close();

            }

            if (conn != null) {

                conn.close();

            }

        } catch (Exception e) {

            throw new SQLException(e.getMessage());

        }

    }

}

E o Enum: TipoUsuario está na própria classe UsuarioSistema.java.

[]'s.

Cara eu estou fazendo umas coisas aqui e dando uma olhada em sua Classe. Fica calmo ai!

hehehe

Me add no MSN: trakinas_bc@hotmail.com

Jóia Allysson?

te add lá.

Abraço.