seguinte tenho uma tabela cliente com id_cliente e nome_cliente e outra tabela venda com id_venda e id_cliente
quero fazer uma consulta na tabela venda id_cliente pra me retornar o nome do cliente mas nao consigo fiz o seguinte
public List<Cliente> listard(Integer id_cliente, Integer id_venda) {
String sql = "SELECT nome_cliente FROM cliente WHERE cliente.id_cliente = ? and venda.id_cliente =?";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_cliente);
stmt.setInt(2, id_venda);
ResultSet rs = stmt.executeQuery();
return getCliente(rs);
} catch (SQLException sQLException) {
System.out.println("Erro ao listar Cliente");
}
return null;
}
}
ai a consulta no banco
ClienteDao cli = new ClienteDao();
Cliente fab = new Cliente();
cli.listard(11 , 3) ;
e aparece ("Erro ao listar Cliente") meu problema é no sql alguem ajuda ai
[quote=fabiodurgante][code]
seguinte tenho uma tabela cliente com id_cliente e nome_cliente e outra tabela venda com id_venda e id_cliente
quero fazer uma consulta na tabela venda id_cliente pra me retornar o nome do cliente mas nao consigo fiz o seguinte
public List<Cliente> listard(Integer id_cliente, Integer id_venda) {
String sql = "SELECT nome_cliente FROM cliente WHERE cliente.id_cliente = ? and venda.id_cliente =?";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_cliente);
stmt.setInt(2, id_venda);
ResultSet rs = stmt.executeQuery();
return getCliente(rs);
} catch (SQLException sQLException) {
System.out.println("Erro ao listar Cliente");
}
return null;
}
}
ai a consulta no banco
ClienteDao cli = new ClienteDao();
Cliente fab = new Cliente();
cli.listard(11 , 3) ;
e aparece (“Erro ao listar Cliente”) meu problema é no sql alguem ajuda ai
[/code][/quote]
cara pra vc visualizar os erros sempre coloque o objeto Exception nas messagens de erro pra saber onde ta o erro
assim
System.out.println("Erro ao listar Cliente\n"+sQLException);
so vendo ai eu ja sei qual é o erro do Exception: collum id_cliente not found
ele nao encontrou a coluna id_cliente, entao quando vc passou o SELECT vc apenas expecificou uma coluna olha so
SELECT nome_cliente
tenta exibir todas com o *
String sql = "SELECT * FROM cliente WHERE cliente.id_cliente = ? and venda.id_cliente =?"
ou entao pra ficar mas rapido a consulta somente as colunas que voce quer saber
String sql = "SELECT id_cliente, id_venda FROM cliente WHERE cliente.id_cliente = ? and venda.id_cliente =?"
no teu sql vc tem que informar as tabelas que voce estara usando na busca das informações
teu sql ficaria assim
String sql = “SELECT A.nome_cliente FROM cliente A,venda B WHERE A.id_cliente = ? and B.id_cliente =? and B.id_cliente=?”;
Você não está fazendo a junção das tabelas…
Pela sua estrutura de tabela toda venda tem apenas um cliente, então é melhor você procurar só pelo código da venda…
fica mais ou menos asssim:
select nome_cliente from venda v, cliente c where v.id_cliente=c.id_cliente and v.id_venda=4;
retorna o nome do cliente na referia venda… tenta aí!
isso mesmo nao fiz a juncao e nao deu certo aqui assim
a tabela cliente tem o id_cliente autoincremento somente 1 id_cliente e na tabela venda o id_cliente vem da tabela cliente cada venda pode ser ealizada para um cliente logico
EXEMPLO o id_venda == 1 foi realizada pro id_cliente == 1 e esse id_cliente == 1 possu la nome clinte endereco do cliente e assim por diante so que nao sei usar isso ???
tenho a tabela venda que possui o id_cliente e o id_venda quero apartir desse id_cliente pegar o nome do cliente que esta na tabela cliente que possui o campo id_cliente e o campo nome_cliente
como afzer isso
Tenta ai:
"SELECT c.nome_cliente " +
"FROM TAB_CLIENTE c " +
"INNER JOIN TAB_VENDA v " +
"ON v.id_cliente = c.id_cliente " +
"WHERE v.id_cliente = ? "+
Passa para o ? o id do cliente.
Abraço.
beleza meu fiz o seu codigo seguinte
public List<Cliente> listard(Integer id_venda) {
String sql = "SELECT * FROM cliente c INNER JOIN venda v ON v.id_cliente = c.id_cliente WHERE v.id_cliente = ? ";
// String sql = "select * from venda v, cliente c where v.id_cliente = c.id_cliente and v.id_venda = ?";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_venda);
ResultSet rs = stmt.executeQuery();
return getCliente(rs);
} catch (SQLException sQLException) {
System.out.println("Erro ao listar Cliente" + sQLException);
}
return null;
}
acho que é assim e depois pra min chama essa funcao
ClienteDao cli = new ClienteDao();
List<Cliente> lista = cli.listard(ven.getid_cliente());
System.out.print(lista.toString());
fiz isso e o retorno é [modelo.Cliente@8814e9, modelo.Cliente@1503a3]
nao sei que que é isso so que nao pegou o nome_cliente
onde ven.getid_vcliente()) pega o id_cliente da tabela venda e chamo a funcao mas e agora ta na lista
que sera que deu errado??????
Repare nesse trecho de código:
String sql = "SELECT * FROM cliente c INNER JOIN venda v ON v.id_cliente = c.id_cliente WHERE v.id_cliente = ? ";
// String sql = "select * from venda v, cliente c where v.id_cliente = c.id_cliente and v.id_venda = ?";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_venda);
Olhe o where:
WHERE v.id_cliente = ? "
Olha o que você passa por parametro:
stmt.setInt(1, id_venda);
Outra coisa não utilize Select * quando for usar Inner Join, em junções grandes a consulta fica muito lenta, alias não use nunca Select *.
Abraço
Ahh e outra coisa, a saida me parece estranha por que uma lista pode conter muitos elementos, como ela vai saber do qual você está se referindo ??
Faz um cast para especializar a mesma, e nesse caso utilize ArrayList que se enquadra melhor.
Assim olha, você tem essas classes:
ClienteBean
ClienteDao
E um objeto do tipo ArrayList
ArrayList listClientes = cli.listard(ven.getid_cliente());
//percorre a lista toda recuperando os elementos
for(int i=0; i<listClientes.size(); i++) {
clienteBean = (ClienteBean) listClientes.get(i);
//aqui você consegue visualizar os metodos proprios do objeto cliente, vamos supor que tenha um
// metodo getNome
System.out.println(clienteBean.getNome());
}
Mude o where do select no ClienteDao para id_venda no lugar de id_cliente
Até.
consegui cara fiz o seguinte
public String listard(Integer id_venda) {
String sql = "SELECT * FROM cliente c INNER JOIN venda v ON v.id_cliente = c.id_cliente WHERE v.id_venda = ? ";
try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id_venda);
ResultSet rs = stmt.executeQuery();
rs.next();
return rs.getString("nome_cliente");
} catch (SQLException sQLException) {
System.out.println("Erro ao listar Cliente" + sQLException);
}
return null;
}
me retorna direto a string com o nome do usuario da tabela cliente apartir do codigo do usuario da tabela venda
ClienteDao cli = new ClienteDao();
cli.listard(ven.getid_venda())
ai perfeito
VALEU AI A TODOS VALEU!!!!!!!!!!!
Agora sim, retornando uma String fica melhor, só falta tirar o SELECT * de lá e colocar nome_cliente no lugar.
Abraço