Cordiais saudações, povo do GUJ.
Por favor, examinem o comando sql que está no método abaixo, pois está dando erro de sintaxe no MySQL:
public ArrayList<ItensPedidoClienteEstendida> carregarListaItens() {
ArrayList<ItensPedidoClienteEstendida> listaItens = new ArrayList<>();
ItensPedidoClienteEstendida itemPedido;
listaItens = null;
bd = BD.getInstance();
sql = "SELECT i.id,"
+ " i.id_pedido_cli,"
+ " i.id_produto,"
+ " i.quantidade,"
+ " i.preco,"
+ " i.data_entrega,"
+ " p.descricao FROM item_pedido_cli AS i LEFT JOIN produtos AS p"
+ " WHERE id = ? AND i.id_produto = p.id;";
try {
statement = bd.connection.prepareStatement(sql);
statement.setString(1, String.valueOf(pedidoCliente.getId()));
resultSet = statement.executeQuery();
int numeroItem = 0;
while(resultSet.next()) {
numeroItem++;
itemPedido = new ItensPedidoClienteEstendida();
itemPedido.setId(resultSet.getInt(1));
itemPedido.setId_pedido_cli(resultSet.getInt(2));
itemPedido.setId_produto(resultSet.getString(3));
itemPedido.setQuantidade(resultSet.getDouble(4));
itemPedido.setPreco(resultSet.getDouble(5));
itemPedido.setData_entrega(resultSet.getDate(6));
itemPedido.setNumero_item(numeroItem);
itemPedido.setDescricao_produto(resultSet.getString(7));
listaItens.add(itemPedido);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Problemas na localização dos itens!\n" + e);
} finally {
BD.getInstance().close();
}
return listaItens;
}
É um comando um pouquinho mais complicado pois acessa duas tabelas para reter a descrição de produto junto com os dados do item de pedido correspondente. Como sou inexperiente com Java e MySQL pode ser um erro fácil mas para mim esta complicado dizer o que é.
Obrigado,
Ronaldo
Qual mensagem de erro está sendo reportada? Por aí já dá pra ter uma ideia.
De toda forma, se você vai fazer a junção com join, acho que falta os parâmetros de junção (“on …”) entre as tabelas no seu join. Algo como:
" p.descricao FROM item_pedido_cli AS i LEFT JOIN produtos AS p ON i.id_produto = p.id"
Agora, se for usar o where para fazer a junção, não precisa do join:
+ " p.descricao FROM item_pedido_cli AS i, produtos AS p"
+ " WHERE id = ? AND i.id_produto = p.id;";
Veja se é isso.
Abraço.
1 curtida
O join está incompleto. O certo é:
FROM
item_pedido_cli i
LEFT JOIN produtos p ON i.id_produto = p.id
Ao usar o ON
no LEFT JOIN
, vc não precisar mais incluir i.id_produto = p.id
no WHERE
.
SELECT
i.id,
i.id_pedido_cli,
i.id_produto,
i.quantidade,
i.preco,
i.data_entrega,
p.descricao
FROM
item_pedido_cli i
LEFT JOIN produtos p ON p.id = i.id_produto
WHERE
id = ?
1 curtida
Esta legal, Lucas. Agora deu outro erro. Vou digitar o que o programa disse:
java.sql.SQLIntegrityConstraintViolationException: Column ‘id’ in where clause is ambiguous
Algum tipo de violação de integridade na coluna id.
O que deve ser isto?
Mais de uma tabela usada na consulta possui a coluna com o nome id. Com isso, não dá para saber de qual tabela é a coluna id usada no WHERE
. Para corrigir isso, vc deve usar o alias da tabela em questão.
Eu estou usando o alias correto! Não sei o que está errado. Veja o código, não está correto?
public ArrayList<ItensPedidoClienteEstendida> carregarListaItens() {
ArrayList<ItensPedidoClienteEstendida> listaItens = new ArrayList<>();
ItensPedidoClienteEstendida itemPedido;
listaItens = null;
bd = BD.getInstance();
sql = "SELECT i.id,"
+ " i.id_pedido_cli,"
+ " i.id_produto,"
+ " i.quantidade,"
+ " i.preco,"
+ " i.data_entrega,"
+ " p.descricao FROM item_pedido_cli AS i LEFT JOIN produtos AS p"
+ " ON i.id_produto = p.id"
+ " WHERE id = ?;";
try {
statement = bd.connection.prepareStatement(sql);
statement.setString(1, String.valueOf(pedidoCliente.getId()));
resultSet = statement.executeQuery();
int numeroItem = 0;
while(resultSet.next()) {
numeroItem++;
itemPedido = new ItensPedidoClienteEstendida();
itemPedido.setId(resultSet.getInt(1));
itemPedido.setId_pedido_cli(resultSet.getInt(2));
itemPedido.setId_produto(resultSet.getString(3));
itemPedido.setQuantidade(resultSet.getDouble(4));
itemPedido.setPreco(resultSet.getDouble(5));
itemPedido.setData_entrega(resultSet.getDate(6));
itemPedido.setNumero_item(numeroItem);
itemPedido.setDescricao_produto(resultSet.getString(7));
listaItens.add(itemPedido);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Problemas na localização dos itens!\n" + e);
} finally {
BD.getInstance().close();
}
return listaItens;
}
Aqui não está usando o alias.
4 curtidas