Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exception in thread "main" java.lang.RuntimeException: org.postgresql.util.PSQLException

Este erro está me atormentando:

Exception in thread "main" java.lang.RuntimeException: org.postgresql.util.PSQLException: Não pode utilizar métodos de consulta que pegam uma consulta de um comando preparado. at br.com.prog2.jdbc.dao.JogoDao.getLista(JogoDao.java:76) at br.com.prog2.jdbc.teste.TestaListagem.main(TestaListagem.java:14) Caused by: org.postgresql.util.PSQLException: Não pode utilizar métodos de consulta que pegam uma consulta de um comando preparado. at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:363) at br.com.prog2.jdbc.dao.JogoDao.getLista(JogoDao.java:55) ... 1 more '''

JogoDao ''' package br.com.prog2.jdbc.dao;

import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Calendar; import java.util.List;

import br.com.prog2.jdbc.ConnectionFactory; import br.com.prog2.jdbc.modelo.Jogo;

public class JogoDao {

private Connection connection;

public JogoDao() { this.connection = new ConnectionFactory().getConnection(); }

public void adicionaContato(Jogo jogo) { String sql = "insert into jogos" + "(nome, preco, plataforma, faixaetaria, pontuacao, descricao, desenvolvedora)" + "values (?,?,?,?,?,?,?)"; try { PreparedStatement preparedSt = connection.prepareStatement(sql);

// setando valores preparedSt.setString(1, jogo.getNome()); preparedSt.setDouble(2, jogo.getPreco()); preparedSt.setString(3, jogo.getPlataforma()); preparedSt.setInt(4, jogo.getFaixaetaria()); preparedSt.setInt(5, jogo.getPontuacao()); preparedSt.setString(6, jogo.getDescricao()); preparedSt.setString(7, jogo.getDesenvolvedora());

// execucao dos blocos preparedSt.execute(); preparedSt.close();

} catch (SQLException e) { e.printStackTrace(); }

}

public List getLista(String busca) { String sql = "select * from jogos where name='"+busca+"'"; List listajogos = new ArrayList<>(); try { PreparedStatement preparedSt = connection.prepareStatement(sql); preparedSt.execute(sql);

ResultSet rs = preparedSt.getResultSet(); while (rs.next()) { long id = rs.getLong("id"); String nome = rs.getString("nome"); double preco = rs.getDouble("preco"); String plataforma = rs.getString("plataforma"); int faixaetaria = rs.getInt("faixaetaria"); int pontuacao = rs.getInt("pontuacao"); String descricao = rs.getString("descricao"); String desenvolvedora = rs.getString("desenvolvedora");

Jogo jogo = new Jogo(id, nome, preco, plataforma, faixaetaria, pontuacao, descricao, desenvolvedora); listajogos.add(jogo); } rs.close(); preparedSt.close(); return listajogos; } catch (SQLException e) { throw new RuntimeException(e); } }

public void atualiza() {

}

public void remove(Jogo jogo){ try { PreparedStatement preparedSt = connection.prepareStatement("delete from contatos where id=?"); preparedSt.setLong(1, jogo.getId()); preparedSt.execute(); preparedSt.close(); } catch (SQLException e){ throw new RuntimeException(e); } } }

main

package br.com.prog2.jdbc.teste;

import java.util.List;

import br.com.prog2.jdbc.dao.JogoDao; import br.com.prog2.jdbc.modelo.Jogo;

public class TestaListagem { public static void main(String[] args) { JogoDao dao = new JogoDao(); Jogo jogo = new Jogo(null, null, 0, null, 0, 0, null, null); dao.adicionaContato(jogo);

List lista = dao.getLista("Jose"); for (Jogo jogo2 : lista) { System.out.println("Nome: "+ jogo.getNome()); } } }

'''

2 respostas
solução!

Problema parcialmente resolvido!

No metodo getLista():

PreparedStatement preparedSt = connection.prepareStatement(sql); preparedSt.execute(sql);

Retirei o sql do preparedSt.execute()

Ficando Assim:

PreparedStatement preparedSt = connection.prepareStatement(sql); preparedSt.execute();

E rodou!

Calebe, boa noite.

Só complementando a sua solução. A classe PreparedStatement é um pré compilador SQL, e a instrução "execute();" apenas executa essa pré compilação que na maioria das vezes retorna um true ou false para um ResultSet por exemplo!

Abs!