Transformar int para string dentro de um preparedStatement

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’

Você deve colocar o id no select também

"SELECT ..., genero.idgenero from filme INNER JOIN genero ON genero.idgenero = filme.idgenero"; . . . filme.setIdgenero(rs.getInt("idgenero"));

Ai vai me retornar o id do genero , não quero o número do ID
e sim a descrição do genero entendeu ?

queria que esse linha aqui aceitasse STRING

filme.setIdgenero(rs.getInt(“descricao”));

ok
neste caso, o correto seria criar um atributo string “genero” na classe Filme, ae ficaria:

Acho que é isso, pois se o atributo que vc está usando “idGenero” é um inteiro, você não vai conseguir atribuir uma string p/ esse cara oO

Entendi só que a minha classe filme é onde tenho minhas variaveis.

E essa idgenero uso para tambem fazer o insert entao tem que ser int por causa
do auto increment na hora do caadastro ;/

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;

Olha esse exemplo com join do meu codigo amigo.

[code]

public List<Produto> findAll() {
List<Produto> lista = new ArrayList<>();

try {
    pstm = getConnetion().prepareStatement(&quot;select p.*,c.categoria as categoria, f.fabricante as Fabricante from produtos p&quot;+
&quot;  inner join categoria c on c.codigo = p.cod_categoria &quot; +
&quot; inner join fabricante f on f.codigo = p.cod_fabric;&quot;);
    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(&quot;select p.*,c.categoria as categoria, f.fabricante as Fabricante from produtos p&quot;+
&quot;  inner join categoria c on c.codigo = p.cod_categoria &quot; +
&quot; inner join fabricante f on f.codigo = p.cod_fabric;&quot;);
    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]

Vou tentar aqui vlw

Então vc conseguiu fazer neh ??

nesse join eu retorno o nome da categoria e do fabricante
ao invez no codigo.

fiz assim


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 ?

Vc tem uma classe Genero na sua Classe Filme para fazer o relacionamento?

se não tiver tem que ter kara.

[quote=vicenthy]Vc tem uma classe Genero na sua Classe Filme para fazer o relacionamento?

se não tiver tem que ter kara.[/quote]

Não tenho , minha primeira experiência em java e to faltando com coisas “bestas”.

Como eu faria essa classe ? me da essa força ai !

É 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=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

o que seriam esses atributos ?

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.