Realizar consulta no postgresql usando java NetBeans

Estou desenvolvendo uma Web Service, mas não sei o que estou fazendo de errado, talvez alguém de vocês me ajude a enxergar o que esta de errado

Estou tentando realizar um select dentro do postgresql através de um where, porém tem apresentado o seguinte erro:

HTTP Status 500 - Internal Server Error

type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: org.postgresql.util.PSQLException: O �ndice da coluna est� fora do intervalo: 1, n�mero de colunas: 0.

root cause

org.glassfish.jersey.server.ContainerException: org.postgresql.util.PSQLException: O �ndice da coluna est� fora do intervalo: 1, n�mero de colunas: 0.

root cause

org.postgresql.util.PSQLException: O �ndice da coluna est� fora do intervalo: 1, n�mero de colunas: 0.

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.1 logs.

Já verifiquei tanto os nomes das colunas da tabela como os itens inseridos nela e todos estão digitados corretamente. Vou deixar abaixo o código usado para vocês darem uma olhada e me ajudarem a achar o erro.

GET
@Produces(“application/json”)
@Path(“Usuario/get/{nome}”)
public String getUsuario(@PathParam(“nome”) String nome) throws SQLException
{
Usuario u = new Usuario();
u.setNome(nome);

    UsuarioDAO dao = new UsuarioDAO();
    u = dao.buscar(u);
    
    Gson g = new Gson();
    return g.toJson(u);
}

public Usuario buscar(Usuario usuario) throws SQLException
{

    String sql = "select * from usuarios where nome like '?%'";
    Usuario retorno = null;
    
    PreparedStatement pst = Conexao.getPreparedStatement(sql);
    
        pst.setString(1, usuario.getNome());
        ResultSet res = pst.executeQuery();
        
        if(res.next())
        {
            retorno = new Usuario();
            retorno.setLoginus(res.getString("loginus"));
            retorno.setSenha(res.getString("senha")); 
            retorno.setEmail(res.getString("email"));
            retorno.setNome(res.getString("nome"));
                       
        }
    
    return retorno;


}

Olá,

Seu problema está na aspas simples no trecho abaixo. Quando você usa o preparedstatement ele já irá cuidar para que o like seja tratado como string. Ou seja, para corrigir o problema, você terá que trocar o código abaixo

"select * from usuarios where nome like '?%'"

por

"select * from usuarios where nome like ?%"

Além disso, tome cuidado pois, dentro do seu while, onde você percorre, o resultset você está criando um usuário novo para cada registro existente. Então, se tiver mais de um usuário com nome parecido ele trará os dados do último usuário que possui o nome parecido com o da consulta. Veja se não é melhor retornar uma lista com os dados de todos os usuários similares a consulta efetuada ou refine a consulta para não usar o like.

Se for para retornar uma lista, você teria que criar um arraylist, mais ou menos assim:

public ArrayList<Usuario> buscar(Usuario usuario) throws SQLException
{
          String sql = "select * from usuarios where nome like ?%";
          ArrayList<Usuario> listaUsuario = new ArrayList<Usuario>();

          Usuario usuario = null;

         if(res.next())
         {
                 
                   retorno = new Usuario();
                   retorno.setLoginus(res.getString("loginus"));
                   retorno.setSenha(res.getString("senha")); 
                   retorno.setEmail(res.getString("email"));
                   retorno.setNome(res.getString("nome"));
                   listaUsuario.add( retorno );
          }
       
return listaUsuario;
}

O correto é:

String sql = "select * from usuarios where nome like ?";
Usuario retorno = null;

PreparedStatement pst = Conexao.getPreparedStatement(sql);
pst.setString(1, usuario.getNome()+'%');