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

java.sql.SQLSyntaxErrorException

Estou tendo esse problema na hora de executar o TestaInsercaoEListagemComProduto, quando eu executo ele dá essa exceção java.sql.SQLSyntaxErrorException, eu entendi que o erro foi em algum codigo sql, mas eu não acho esse erro e já reassistir umas 3 vezes a aula para ver se eu fiz aluguma coisa errada mas ate onde eu vi não, quem pode me ajudar ficarei grato :)

  • TestaInsercaoEListagemComProduto
package br.com.alura.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import br.com.alura.jdbc.dao.ProdutoDAO;
import br.com.alura.jdbc.modelo.Produto;

public class TestaInsercaoEListagemComProduto {

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

        Produto comoda = new Produto("Cômoda", "Cômoda vertical");

        try (Connection connection = new ConnectionFactory().recuperarConexao()) {
            ProdutoDAO produtoDao = new ProdutoDAO(connection);
            produtoDao.salvar(comoda);
            List<Produto> listaDeProdutos = produtoDao.listar();
            listaDeProdutos.stream().forEach(lp -> System.out.println(lp));
        }
        System.out.println(comoda);
    }
}
  • ProdutoDAO
package br.com.alura.jdbc.dao;

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

import br.com.alura.jdbc.modelo.Produto;

public class ProdutoDAO {

    private Connection connection;

    public ProdutoDAO(Connection connection) {
        this.connection = connection;
    }

    public void salvar(Produto produto) throws SQLException {
        String sql = "INSERT INTO PRODUTO (nome, descricao) values (?, ?)";

        try(PreparedStatement pstm = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            pstm.setString(1,produto.getNome());
            pstm.setString(2, produto.getDescricao());

            pstm.execute();

            try(ResultSet rst = pstm.getGeneratedKeys()) {
                while(rst.next()) {
                    produto.setId(rst.getInt(1));
                }
            }
        }
    }

    public List<Produto> listar() throws SQLException {
        List<Produto> produtos = new ArrayList<Produto>();

        String sql = "SELECT ID, NOME, DESCRICAO FROM PRODUTOS";

        try(PreparedStatement pstm = connection.prepareStatement(sql)) {
            pstm.execute();

            try(ResultSet rst = pstm.getResultSet()) {
                while (rst.next()) {
                    Produto produto = new Produto(rst.getInt(1), rst.getString(2), rst.getString(3));

                    produtos.add(produto);
                }
            }
        }
        return produtos;
    }


}
  • Produto
package br.com.alura.jdbc.modelo;

public class Produto {

    private Integer id;
    private String nome;
    private String descricao;

    public Produto(String nome, String descricao) {
        super();
        this.nome = nome;
        this.descricao = descricao;
    }

    public Produto(Integer id, String nome, String descricao) {
        this.id = id;
        this.nome = nome;
        this.descricao = descricao;
    }



    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public String getDescricao() {
        return descricao;
    }

    @Override
    public String toString() {
        return String.format("O produto é: %d, %s, %s", 
                this.id, this.nome, this.descricao);
    }

}
6 respostas

Boa noite, Seu SQL parece estar ok, posta o print do erro completo por favor.

Exception in thread "main" java.sql.SQLSyntaxErrorException: Table 'loja_virtual.produtos' doesn't exist
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
    at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67)
    at br.com.alura.jdbc.dao.ProdutoDAO.listar(ProdutoDAO.java:44)
    at br.com.alura.jdbc.TestaInsercaoEListagemComProduto.main(TestaInsercaoEListagemComProduto.java:18)

As outras funções como remover, listar está tudo funcionado

solução!

O erro era realmente no seu SQL, na sua classe ProdutoDAO na seguinte parte: String sql = "SELECT ID, NOME, DESCRICAO FROM PRODUTOS";. Onde vc colocou PRODUTOS é na verdade PRODUTO.

Era isso msm, muito obg :). ja tava com muita raiva sem entender o pq de não está funcionando

Magina, tmj meu querido