Problemas com prepareStatement

3 respostas
mococa

tenho uma aplicação utilizando struts e naum tá aceitando o comenda prepareStatement … segue a classe:

package br.com.caelum.jdbc.dao;

import br.com.caelum.jdbc.*;
import br.com.caelum.jdbc.modelo.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ContatoDAO {

	// a conex�o com o banco de dados
	private Connection connection;

	// construtor que recebe a conex�o
	public ContatoDAO(Connection con) {
		this.connection = con;
	}

	public ContatoDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();
	}

	public void adiciona(Contato contato) throws SQLException {

		// prepared statement para inser��o
		PreparedStatement stmt = this.connection
				.prepareStatement("insert into contatos (nome,email,endereco) values (?, ?, ?)");

		// seta os valores
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());

		// executa
		stmt.execute();
		stmt.close();
	}

	public List<Contato> getLista() throws SQLException {

		PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
		ResultSet rs = stmt.executeQuery();

		List<Contato> list = new ArrayList<Contato>();
		while (rs.next()) {
			// criando o objeto Contato 
			Contato contato = new Contato();
			contato.setId(rs.getLong("id"));
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setEndereco(rs.getString("endereco"));

			// adicionando o objeto � lista
			list.add(contato);
		}

		rs.close();
		stmt.close();

		return list;
	}

	public void altera(Contato contato) throws SQLException {
		PreparedStatement stmt = connection.prepareStatement("update contatos set nome=?, email=?, endereco=? where id=?");
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.setLong(4, contato.getId());
		stmt.execute();
		stmt.close();
	} 

	public void remove(Contato contato) throws SQLException {
		PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
		stmt.setLong(1, contato.getId());
		stmt.execute();
		stmt.close();
	} 

	public Contato procura(Long id) throws SQLException {
		PreparedStatement stmt = connection.prepareStatement("select * from contatos where id=?");
		stmt.setLong(1, id);
		ResultSet rs = stmt.executeQuery();
		
		if(!rs.next()) return null;

		Contato c = new Contato();
		c.setId(rs.getLong("id"));
		c.setNome(rs.getString("nome"));
		c.setEmail(rs.getString("email"));
		c.setEndereco(rs.getString("endereco"));
		rs.close();
		stmt.close();
		return c; 
	}
}

o driver mysqlconector é o 3.1.8

valeu

3 Respostas

alberto_ribeiro

tem como você postar o erro que está dando???

[]'s

mococa
HTTP Status 500 -
________________________________________
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
   org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
   org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
root cause
java.lang.NullPointerException
   com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:1845)
   com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:1770)
   java.lang.String.valueOf(String.java:2577)
   java.lang.StringBuffer.append(StringBuffer.java:220)
   com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240)
   com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167)
   com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126)
   com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45)
   com.mysql.jdbc.Connection.registerStatement(Connection.java)
   com.mysql.jdbc.Statement.<init>(Statement.java:171)
   com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:139)
   com.mysql.jdbc.ServerPreparedStatement.toString(ServerPreparedStatement.java:851)
   java.lang.String.valueOf(String.java:2577)
   java.lang.StringBuffer.append(StringBuffer.java:220)
   com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240)
   com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167)
   com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126)
   com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45)
   com.mysql.jdbc.Connection.registerStatement(Connection.java)
   com.mysql.jdbc.Statement.<init>(Statement.java:171)
   com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:201)
   com.mysql.jdbc.ServerPreparedStatement.<init>(ServerPreparedStatement.java:133)
   com.mysql.jdbc.Connection.prepareStatement(Connection.java:1370)
   com.mysql.jdbc.Connection.prepareStatement(Connection.java:1335)
   br.com.ricardo.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:26)
   br.com.ricardo.struts.action.AdicionaContatoAction.execute(AdicionaContatoAction.java:26)
   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
   org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
________________________________________
Apache Tomcat/5.5.9

ele naum reconhece o prepareStatement…eu mudei e deu certo…

valeu

daviscabral

Tou fazendo um lance aqui com prepareStatement e tá dando problema também:

<a>code</a>

try {

this.stmt = this.conn.prepareStatement(“select * from ?”);

this.stmt.setString(1,table);
this.rs = this.stmt.executeQuery(); // PROBLEMA AQUI
        //rs.next();
        //System.out.println("Dados: "+rs.getString(1)+" :: "+rs.getString(2));
        System.out.println("Nada");
    } finally { 

(…)

Quando ele chega na linha comentada ali, dá pau, não imprime o “Nada”.

public class TesteDB { private Connection conn; PreparedStatement stmt = null; ResultSet rs = null; }

Alguma luz?

Valeus!

Criado 5 de dezembro de 2006
Ultima resposta 21 de dez. de 2006
Respostas 3
Participantes 3