ERRO Consulta POSTGRESQL

2 respostas
A

Bom dia comunidade do GUJ;

Estou reiniciando meus estudos em JAVA EE e necessito implementar uma classe de login, mas está dando a seguinte exceção ao executar o código:

javax.servlet.ServletException: org.postgresql.util.PSQLException: O índice da coluna está fora do intervalo: 2, número de colunas: 0. br.com.javamagazine.exemplologin.Logar.doPost(Logar.java:59) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
O código da minha classe é o seguinte:
package br.com.javamagazine.exemplologin;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class Logar
 */
@WebServlet("/Logar")
public class Logar extends javax.servlet.http.HttpServlet{
	private static final long serialVersionUID = 1L;

	public Logar() {
		super();
		// TODO Auto-generated constructor stub
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection conexao = null;
		PreparedStatement stmt = null;
		ResultSet res =  null;
		try{
			String login = request.getParameter("login");
			String senha = request.getParameter("senha");
			Class.forName("org.postgresql.Driver");
			conexao = DriverManager.getConnection("jdbc:postgresql://localhost:5432/meuBancoLindo", "postgres", "123456");
			stmt = conexao.prepareStatement("Select * from tb_usuarios where login=angela");
			stmt.setString(2, login);			
			res = stmt.executeQuery();
			Usuario usuario = null;
			if(res.first()){
				usuario = new Usuario();
				usuario.setId(res.getInt("id"));
				usuario.setNome(res.getString("nome"));
				usuario.setLogin(res.getString("login"));
				usuario.setSenha(res.getString("senha"));
			}
			if(usuario==null||!usuario.getSenha().equals(senha)){
				request.getSession().setAttribute("msg", "Login ou senha incorretos!");
				response.sendRedirect("index.jsp");
			}else{
				request.getSession().setAttribute("usuario", usuario);
				response.sendRedirect("admin/index.jsp");
			}
		}catch(Exception e){
			throw new ServletException(e);
		}finally{
			try{
				res.close();
				stmt.close();
				conexao.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}         
}

Minha Tabela no Banco de Dados é a seguinte:

CREATE TABLE tb_usuarios ( id integer NOT NULL DEFAULT nextval('id_seq'::regclass), nome character varying(100) NOT NULL, login character varying(50) NOT NULL, senha character varying(25) NOT NULL, CONSTRAINT tb_usuarios_pkey PRIMARY KEY (id ) );

Já pesquisei este erro em vários Fóruns e já tentei seguir estes passos para corrigir o problema:
* Mudei a consulta SQL (não adiantou u.u');
* Verifiquei se a consulta funciona ao ser rodada no PgAdminIII (funciona);

Comentando linhas de código, tive a sensação de que o erro está dando na linha:
stmt.setString(2, login);
Mas também não consigo entender porquê T_T

Agradeço desde já pela atenção de todos :D

2 Respostas

G

angelitah,

este trecho de código:

stmt = conexao.prepareStatement("Select * from tb_usuarios where login=angela");  
            stmt.setString(2, login);

deve ser assim:

stmt = conexao.prepareStatement("Select * from tb_usuarios where login=?");  
            stmt.setString(1, login);

Note o ponto de interrogação no sql, cada um deles representa um índice que você deve preencher. Como você só tem 1, então usa stmt.setString(1, login);

A

Corrigiu o erro /o/

Deu um outro erro agora, mas vou tentar arrumar sozinha este :slight_smile: (Se não conseguir, volto aqui).

Esta sua solução está exatamente como no tutorial que estou seguindo (sou muito cabeçuda ¬¬’). Mas agora eu entendo para que esta parte do código serve. Muito obrigada mesmo!

PS: Para interessados, segue o link do tutorial que estou seguindo para login com controle de sessão --> http://www.devmedia.com.br/controle-de-acesso-com-filtros/1720#ixzz21XlwwznR

Criado 26 de julho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 2
Participantes 2