Acho que é algo simples mas está difícil para mim.
Tenho um retorno de uma consulta que coloco dentro de uma jtable.
Minha consulta contém inner Join.
o meu campo no preparedStatement esta assim
[code] try{
sql = “SELECT filme.idfilme,filme.titulo,filme.preco,genero.descricao from filme INNER JOIN genero ON genero.idgenero = filme.idgenero”;
con= new conexao();
con.getConnection();
pstmt = con.connection.prepareStatement(sql);
rs = pstmt.executeQuery();
Filme Filme;
while(rs.next()){
filme = new Filme();
filme.setIdfilme(rs.getString(“idfilme”));
filme.setTitulo(rs.getString(“titulo”));
filme.setPreco(rs.getString(“preco”));
filme.setIdgenero(rs.getInt(“descricao”)); // aqui ele me retorna a descricao do genero e não o id do genero . Ele está INT porque eu mando para o banco
o id do genero para poder fazer o inner join;;
listaFilme.add(filme);
}
}catch(SQLException erro){
System.err.println(erro);
}
return listaFilme;
} [/code]
como fazer para fazer ali aceitar uma String ? que é o nome da descrição;
erro que aparece no netbens:
java.sql.SQLException: Invalid value for getInt() - ‘Ação’
Na classe Filme, troque o método para setGenero, e receba um objeto do tipo String.
No statement, faça getString e pegue a descrição do genero. O join saberá qual é a descrição certa para pegar. O fato do seu idGenero ser auto_incremente não tem nada a ver.
[quote=ViniGodoy]Na classe Filme, troque o método para setGenero, e receba um objeto do tipo String.
No statement, faça getString e pegue a descrição do genero. O join saberá qual é a descrição certa para pegar. O fato do seu idGenero ser auto_incremente não tem nada a ver.[/quote]
Vini criei na classe filme este metodo
[code]public void setGenero(String idgenero) {
} [/code]
Mas essa parte do objeto string não entendi , assim ao inves de aparecer a descrição fica aparecendo apenas 0;
public List<Produto> findAll() {
List<Produto> lista = new ArrayList<>();
try {
pstm = getConnetion().prepareStatement("select p.*,c.categoria as categoria, f.fabricante as Fabricante from produtos p"+
" inner join categoria c on c.codigo = p.cod_categoria " +
" inner join fabricante f on f.codigo = p.cod_fabric;");
rs = pstm.executeQuery();
while(rs.next()){
Produto p = new Produto();
p.setCodigo(rs.getInt(1));
p.setProduto(rs.getString(2));
p.setQtd(rs.getInt(3));
p.setPreco(rs.getDouble(4));
p.setDiscricao(rs.getString(5));
p.setData_cad(rs.getDate(6).toString());
Categoria c = new Categoria();
Fabricante f = new Fabricante();
c.setCategoria(rs.getString(9));
f.setFabric(rs.getString(10));
p.setCategoria(c);
p.setFabricante(f);
lista.add(p);
}[/code]
[quote=vicenthy]Olha esse exemplo com join do meu codigo amigo.
[code]
public List<Produto> findAll() {
List<Produto> lista = new ArrayList<>();
try {
pstm = getConnetion().prepareStatement("select p.*,c.categoria as categoria, f.fabricante as Fabricante from produtos p"+
" inner join categoria c on c.codigo = p.cod_categoria " +
" inner join fabricante f on f.codigo = p.cod_fabric;");
rs = pstm.executeQuery();
while(rs.next()){
Produto p = new Produto();
p.setCodigo(rs.getInt(1));
p.setProduto(rs.getString(2));
p.setQtd(rs.getInt(3));
p.setPreco(rs.getDouble(4));
p.setDiscricao(rs.getString(5));
p.setData_cad(rs.getDate(6).toString());
Categoria c = new Categoria();
Fabricante f = new Fabricante();
c.setCategoria(rs.getString(9));
f.setFabric(rs.getString(10));
p.setCategoria(c);
p.setFabricante(f);
lista.add(p);
}[/code][/quote]
while(rs.next()){
filme = new Filme();
filme.setIdfilme(rs.getString("idfilme"));
filme.setTitulo(rs.getString("titulo"));
filme.setPreco(rs.getString("preco"));
Genero g = new Genero();
g.setDescricao(rs.getString("descricao"));
filme.setIdgenero(g);
listaFilme.add(filme);
}
Só que quando coloco meu setidgenero ai com o g
ele pede pra criar um metodo que receba g la na minha classe filme
e mesmo assim o valor ainda fica 0 , o que sera ?
É só vc criar na sua classe filme uma atributo do tipo genero.
Tipo assim
public class Filme {
private Genero genero;
atributos
.
.
.
set e get;
public void setGenero(Genero genero){
this.genero = genero;
}
public Genero getGenero(){
return genero;
}
}
[quote=vicenthy]É só vc criar na sua classe filme uma atributo do tipo genero.
Tipo assim
public class Filme {
private Genero genero;
atributos
.
.
.
set e get;
public void setGenero(Genero genero){
this.genero = genero;
}
public Genero getGenero(){
return genero;
}
}
entendeu ?[/quote]
Não era para criar uma CLASSE ? tenho uma classe genero no mesmo pacote da classe filme. não uma dentro da outra
Kara pesquisar sobre relacionamentos com jdbc, infelizmente não vou poder continuar te ajudando por que to saindo mas amanha do uma olhada no seu tópico.