Error fetching a list from the bank

1

Hey, guys,

So I have a question in my college work,

I have two tables one USER and USER_AMIGO both related, by java I'm looking for a user list that brings all users registered, and another list that brings a friend to a certain user, so I can not bring those values.

My code ListAll and FriendFriends

public List<Usuario> buscarAmigos(int cdUsuario){
        String sql = "SELECT USUARIO_CD_USUARIO FROM USUARIO_AMIGO "
                + "INNER JOIN USUARIO "
                + "ON USUARIO_AMIGO.USUARIO_CD_USUARIO = USUARIO.CD_USUARIO "
                + "AND USUARIO_AMIGO.USUARIO_CD_USUARIO = ?";
        List<Usuario> amigos = new ArrayList<Usuario>();
        try {
            PreparedStatement st = conn.prepareStatement(sql);
            st.setInt(1, cdUsuario);
            ResultSet resultado = st.executeQuery();
            while(resultado.next()){
                Usuario usuario = new Usuario();
                usuario.setCdUsuario(resultado.getInt("CD_USUARIO"));
                usuario.setDataNasc(resultado.getString("DT_NASCIMENTO"));
                usuario.setFoto(resultado.getString("FOTO_USUARIO"));
                usuario.setLocalizacao(resultado.getString("NM_LOCALIZAO"));
                usuario.setNome(resultado.getString("NM_NOME"));
                usuario.setSobrenome(resultado.getString("NM_SOBRENOME"));
                usuario.setEmail(resultado.getString("EMAIL_USUARIO"));
                usuario.setNmUsuario(resultado.getString("NM_USUARIO"));
                usuario.setSexo(resultado.getString("TP_SEXO").charAt(0));
                amigos.add(usuario);
            }
            st.close();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println(e);
        }
        return amigos;
    }

    public List<Usuario> buscarTodos(){
        String sql = "SELECT * FROM USUARIO";
        List<Usuario> lista = new ArrayList<Usuario>();
        try {
            PreparedStatement st = conn.prepareStatement(sql);      
            ResultSet resultado = st.executeQuery();
            while(resultado.next()){
                Usuario usuario = new Usuario();
                usuario.setCdUsuario(resultado.getInt("CD_USUARIO"));
                usuario.setDataNasc(resultado.getString("DT_NASCIMENTO"));
                usuario.setFoto(resultado.getString("FOTO_USUARIO"));
                usuario.setLocalizacao(resultado.getString("NM_LOCALIZACAO"));
                usuario.setNome(resultado.getString("NM_NOME"));
                usuario.setSobrenome(resultado.getString("NM_SOBRENOME"));
                usuario.setEmail(resultado.getString("EMAIL_USUARIO"));
                usuario.setNmUsuario(resultado.getString("NM_USUARIO"));
                usuario.setSexo(resultado.getString("TP_SEXO").charAt(0));
                //usuario.setAmigos(this.buscarAmigos(usuario.getCdUsuario()));
                usuario.setAmigos(this.buscarAmigos(resultado.getInt("CD_USUARIO")));
                lista.add(usuario);
            }
            st.close();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println(e);
        }
        return lista;
    }

Test class

// GET AMIGOS
        try {
            UsuarioDao dao = new UsuarioDao();
            List<Usuario> listaAmigos = dao.buscarAmigos(1);
            System.out.println("Amigos do usuario:");
            for (Usuario u : listaAmigos){
                System.out.println(u.getCdUsuario() + " - " + u.getNome() + " " + u.getSobrenome());;
            }
        } catch (Exception e) {
            System.out.println(e);
        }

        // GET USUARIOS
        try {
            UsuarioDao dao = new UsuarioDao();
            List<Usuario> listaUsuario = dao.buscarTodos();
            System.out.println("Lista de usuario:");
            for (Usuario u : listaUsuario){
                System.out.println(u.getCdUsuario() + " - " + u.getNome() + " " + u.getSobrenome());
            }
        } catch (Exception e) {
            System.out.println(e);
        }

The error that returns me

java.sql.SQLException: Nome de coluna inválido
    at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3724)
    at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2799)
    at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:438)
    at br.com.younews.dao.UsuarioDao.buscarAmigos(UsuarioDao.java:94)
    at br.com.younews.dao.UsuarioDao.buscarTodos(UsuarioDao.java:131)
    at br.com.younews.teste.TesteUsuarioDao.main(TesteUsuarioDao.java:67)

My table

    
asked by anonymous 16.10.2015 / 23:14

1 answer

1

My friend, let's take a closer look at your situation.

In your SQL, we have the following:

 String sql = "SELECT USUARIO_CD_USUARIO FROM USUARIO_AMIGO "
            + "INNER JOIN USUARIO "
            + "ON USUARIO_AMIGO.USUARIO_CD_USUARIO = USUARIO.CD_USUARIO "
            + "AND USUARIO_AMIGO.USUARIO_CD_USUARIO = ?";

Okay, so if you run this in IBExpert or sql management studio or anything else that runs SQL, you'll just have your tuple (result row) with a column.

USUARIO_CD_USUARIO
==================
1
2
3

However, in your ResultSet you are searching for columns that do not currently exist in your Query.

At least try to declare columns in your SQL. Something simple, like:

String sql = " SELECT USUARIO_AMIGO.* " 
           + " FROM USUARIO_AMIGO "
           + " INNER JOIN USUARIO ON (USUARIO_AMIGO.USUARIO_CD_USUARIO = USUARIO.CD_USUARIO) "
           + " WHERE USUARIO_AMIGO.USUARIO_CD_USUARIO = ?"

Or better yet, make sure in which table are the fields you are trying to use in ResultSet and write them extensively in your SQL.

Preferably always use TABELA.CAMPO because this makes it easy for you to understand what you are looking for in your database, or else you can maintain the code you have designed.

But at least try. Yes, the data you want must all be declared in your select, regardless of how you use ( "SELECT * FROM TABELA" ou "SELECT TABELA.CAMPO FROM TABELA ...")

    
17.10.2015 / 18:52