Problema com query mysql

5 respostas
L

Olá pessoal…

Estou fazendo um programa que busca pelo nome só que não consigo fazer ele retornar passando uma String…

Alguém pode me ajudar??

A classe DAO está assim:

public Habitante getProcura(String nome) throws SQLException {

PreparedStatement stm = this.connection
			.prepareStatement("select * from habitantes where nome=?");

	stm.setString(1, nome);

	ResultSet rs = stm.executeQuery();

	//List<Habitante> procura = new ArrayList<Habitante>();

	// while(rs.next()){

	Habitante habitante = new Habitante();
	habitante.setNome(rs.getString("nome"));
	System.out.println(rs.getString("nome"));
	habitante.setEndereco(rs.getString("endereco"));

	return habitante;

}

Eu criei uma classe main pra testar:

import java.sql.SQLException;
import java.util.Scanner;

import br.com.ijaci.aniversariantes.dao.HabitantesDAO;

public class TestaProcura {

public static void main(String[] args) throws SQLException {

	HabitantesDAO dao = new HabitantesDAO();

	Scanner teclado = new Scanner(System.in);
	dao.getProcura(teclado.nextLine());

}

}

Ocorre o seguinte erro:

Conectado ao banco

teste

Exception in thread “main” java.sql.SQLException: Before start of result set

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)

at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:720)

at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5624)

at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5544)

at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5584)

at br.com.ijaci.aniversariantes.dao.HabitantesDAO.getProcura(HabitantesDAO.java:92)

at TestaProcura.main(TestaProcura.java:13)

Outra coisa…eu queria colocar isso em uma página JSP, tipo eu criei uma JSP com um formulário que passa o nome a ser buscado e ele tem que retornar todos os dados…

Muito Obrigado!

[]'s

Leonardo

5 Respostas

alves.Felipe

Ola…

PreparedStatement stm = this.connection
.prepareStatement(“select * from habitantes where nome=?”);

isso esta tudo numa linha só né??

o seu return esta dentro do bloco do while??

dentro do while vc precisa adicionar o Habitante no list procura e retornar o procura…

o seu System.out.println(rs.getString(“nome”)); chega a imprimir algo?

e o que tem na linha 92 do HabitantesDAO?

L

Sim está em uma linha só…

Então eu tirei o * da query, quero retornar somente um habitante…

ta dando outro erro:

Conectado ao banco

teste

Exception in thread main com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near from habitantes where nome=teste’’ at line 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)

at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)

at br.com.ijaci.aniversariantes.dao.HabitantesDAO.getProcura(HabitantesDAO.java:85)

at TestaProcura.main(TestaProcura.java:13)
alves.Felipe

Cara.. vc tirou o * do sql..mas colocou os campos que quer né?!?!?! deve ser por isso que esta dando erro de sintaxe. haha

faz assim: ( agora que vi que esta comentado umas linhas.. hoho:))

public Habitante getProcura(String nome) { 
Habitante habitante = new Habitante();
try
{
PreparedStatement stm = this.connection.prepareStatement("select * from habitantes where nome=?"); 

stm.setString(1, nome); 

ResultSet rs = stm.executeQuery(); 
 

  if(rs.next())
  {
  habitante.setNome(rs.getString("nome")); 
  System.out.println(rs.getString("nome")); 
  habitante.setEndereco(rs.getString("endereco")); 
  }
}
cacth(Exception e)
{
e.printStackTrace();
}
return habitante; 
}

acho que assim funciona

L

Ainda não funcionou…eu fiz um debug e vi que o erro ocorre na linha

ResultSet rs = stm.executeQuery();

Tem alguma ideia???

alves.Felipe

Cara… seila… deve ser alguma coisa no seu select…
o parametro nome tem algum valor? faz uns system.out ai…

tem como tentar rodar esse select no console do banco??tenta la…

e posta o printStackTrace(); …

Criado 3 de junho de 2008
Ultima resposta 3 de jun. de 2008
Respostas 5
Participantes 2