Java-Function-oracle

1 resposta
caiomacedor
galera nunca havia feito isso antes. Estou tentando conforme documentação mas esta dando erro?: Alguem aqui pode me dar um help?
private Connection connection;
	private CallableStatement statement;
	private ResultSet rs;

	public List<Usuario> getListaUsuario() throws SQLException{
		this.connection = ConnectionFactory.getInstance().getConnection();
		List<Usuario> usuarios = new ArrayList<Usuario>();
		try {
			String query = "SELECT usuario_pkg.listarUsuario FROM DUAL";
			this.statement = this.connection.prepareCall(query);
			this.statement.execute();
			this.rs = (ResultSet) this.statement.getObject(1);
			while(rs.next()) {
				Usuario usuario = new Usuario();
				usuario.setIdUsuario(rs.getLong(1));
				usuario.setNmUsuario(rs.getString(2));
				usuario.setLogin(rs.getString(3));
				usuario.setPassword(rs.getString(4));
				usuario.setDtCriacao(rs.getDate(5));
				usuarios.add(usuario);
			}
			
		} catch (Exception e) {
			throw new SQLException(e.getMessage());
		}
		return usuarios;
	}
esta dando esse exeption:
java.sql.SQLException: Índice de coluna inválido

1 Resposta

B

Cara este erro significa que algum dos índices (1, 2, 3, 4 e/ou 5) recuperados dentro do while é inválido, ou seja, não existe.

Tente executar assim:

public List<Usuario> getListaUsuario() throws SQLException{   
        this.connection = ConnectionFactory.getInstance().getConnection();   
        List<Usuario> usuarios = new ArrayList<Usuario>();   
        try {   
            String query = "SELECT usuario_pkg.listarUsuario FROM DUAL";   
            this.statement = this.connection.prepareCall(query);   
            this.rs = this.statement.executeQuery();   
            while(rs.next()) {   
                Usuario usuario = new Usuario();   
                usuario.setIdUsuario(rs.getLong(1));   
                usuario.setNmUsuario(rs.getString(2));   
                usuario.setLogin(rs.getString(3));   
                usuario.setPassword(rs.getString(4));   
                usuario.setDtCriacao(rs.getDate(5));   
                usuarios.add(usuario);   
            }   
               
        } catch (Exception e) {   
            throw new SQLException(e.getMessage());   
        }   
        return usuarios;   
    }

Caso não funcione, verifique se o retorno da função é um cursor que permite recuperar os valores como você fez no while.

Criado 9 de novembro de 2009
Ultima resposta 9 de nov. de 2009
Respostas 1
Participantes 2