Transformar int para string dentro de um preparedStatement
15 respostas
J
japaax
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
try{sql="SELECT filme.idfilme,filme.titulo,filme.preco,genero.descricao from filme INNER JOIN genero ON genero.idgenero = filme.idgenero";con=newconexao();con.getConnection();pstmt=con.connection.prepareStatement(sql);rs=pstmt.executeQuery();FilmeFilme;while(rs.next()){filme=newFilme();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 bancooiddogeneroparapoderfazeroinnerjoin;;listaFilme.add(filme);}}catch(SQLExceptionerro){System.err.println(erro);}returnlistaFilme;}
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'
"SELECT ..., genero.idgenero from filme INNER JOIN genero ON genero.idgenero = filme.idgenero";
.
.
.
filme.setIdgenero(rs.getInt("idgenero"));
J
japaax
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”));
R
rjbn_
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
J
japaax
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 ;/
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.
J
japaax
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.
Vini criei na classe filme este metodo
public void setGenero(String idgenero) {
}
Mas essa parte do objeto string não entendi , assim ao inves de aparecer a descrição fica aparecendo apenas 0;
vicenthy
Olha esse exemplo com join do meu codigo amigo.
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);
}
J
japaax
vicenthy:
Olha esse exemplo com join do meu codigo amigo.
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);
}
Vou tentar aqui vlw
vicenthy
Então vc conseguiu fazer neh ??
nesse join eu retorno o nome da categoria e do fabricante
ao invez no codigo.
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 ?
vicenthy
Vc tem uma classe Genero na sua Classe Filme para fazer o relacionamento?
se não tiver tem que ter kara.
J
japaax
vicenthy:
Vc tem uma classe Genero na sua Classe Filme para fazer o relacionamento?
se não tiver tem que ter kara.
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 !
vicenthy
É só vc criar na sua classe filme uma atributo do tipo genero.
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 ?
vicenthy
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.