Error while fetching a list in the bank

Asked

Viewed 473 times

1

Eae personal,

So I have a question about my college job,

I have two tables a user and USUARIO_AMIGO both related, by java I’m searching a user list that brings all registered users, and another list that brings a friend of a certain user, so I can not bring these values.

My Code Lists All and Friends Lists

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 to 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

inserir a descrição da imagem aqui

  • I checked all of them

  • line 67 - List<User> listUsuario = dao.buscarTodos();

  • Guilherme, edits the question and puts more information about the tables you are using to make it easier to identify the problem. One detail that I found strange is that you started talking about having a table AMIGO_USUARIO and in your SQL you use USUARIO_AMIGO.

  • had me confused, corrected

1 answer

1

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 = ?";

Ok, so if you run this in Ibexpert or sql management studio or anything else that runs SQL, you will only have your tuple(result line) with a column.

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

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

At least try declaring yourself to be 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 which table are the fields you’re trying to use on ResultSet and write them in full in your SQL.

Use preferably always TABELA.CAMPO because it makes it easier for you to understand what you’re looking for from your database, as well as another one that might be able to maintain the code you designed.

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

  • Now it makes sense. Just delete the other answer. Read the [tour] to better understand the site. By the way, welcome to [pt.so]

Browser other questions tagged

You are not signed in. Login or sign up in order to post.