Problema UPDATE no SQL pelo Java

6 respostas
guirodr
O Banco de Dados:
create database biblioteca --cria banco de dados
go
use biblioteca --usa o banco de dados
go
create table livros( --cria a tabela e atributos
	Titulo varchar(60)not null,
	Autor varchar(60), 
	Editora varchar(60), 
	Gênero varchar(60), 
	Isbn varchar(20), 
	Edição int,
	Tipo varchar(20)) 
go
O Método Alterar
public void alterar(String isbn, String titulo, int edicao, String genero, String tipo, String autor, String editora){

     String sql="UPDATE livros SET Titulo='?',Autor='?',Editora='?',Genero='?',Isbn=?,Edicao='?',Tipo='?' WHERE Isbn=?";
    try{
            Connection conn=Conexao.getConexao();
            PreparedStatement pst=conn.prepareStatement(sql);
            pst.setString(1,titulo);
            pst.setString(2,autor);
            pst.setString(3,editora);
            pst.setString(4,genero);
            pst.setString(5,isbn);
            pst.setInt(6,edicao);
            pst.setString(7,tipo);
            pst.setString(8,isbn);
            pst.executeUpdate();


    }catch(Exception e){

      System.out.println("Erro AO ALTERAR: "+e.toString());

    }
}

O problema é esse: Erro AO ALTERAR: com.microsoft.sqlserver.jdbc.SQLServerException: The index 3 is out of range.

Alguém pode me ajudar?

6 Respostas

jamirdeajr

Olá,
Não é necessário colocar as aspas simples nos parâmetros, o próprio setXXX se encarrega de fazer isso se for necessário.
Essa linha fica assim:

String sql="UPDATE livros SET Titulo = ? , Autor = ? , Editora = ? , Genero = ? ,Isbn = ? , Edicao = ? ,Tipo = ? WHERE Isbn = ? ";
guirodr

[quote=jamirdeajr]Olá,
Não é necessário colocar as aspas simples nos parâmetros, o próprio setXXX se encarrega de fazer isso se for necessário.
Essa linha fica assim:

String sql="UPDATE livros SET Titulo = ? , Autor = ? , Editora = ? , Genero = ? ,Isbn = ? , Edicao = ? ,Tipo = ? WHERE Isbn = ? ";

Mas ainda não ta fazendo o Update. :confused: Da erro nenhum, mas vou no banco e não ta lá.

jamirdeajr

Só agora vi teu script SQL…

create database biblioteca --cria banco de dados
go
use biblioteca --usa o banco de dados
go
create table livros( --cria a tabela e atributos
Titulo varchar(60)not null,
Autor varchar(60),
Editora varchar(60),
Gênero varchar(60),
Isbn varchar(20),
Edição int,
Tipo varchar(20))
go

Você criou os campos ‘Gênero’ e ‘Edição’ com desse jeito, com os acentos?
Se for temos que mudar pra ficar assim:

String sql="UPDATE livros SET Titulo=?,Autor=?,Editora=?,Gênero=?,Isbn=?,Edição=?,Tipo=? WHERE Isbn=?";
guirodr

Mas as tabelas tão com o nome certo, eu não tinha executado essa linha da tabela não. No banco as tabelas tão com os nomes sem acento.

leo.alvesneuwald

Não entendi muito bem, mas tente colocar o autocommit (acho que é padrão true, mas vá lá né) e fechar a conexão ao final.

conn.setAutoCommit(true); pst.close();

Da uma olhada também no que o ISBN está trazendo.

guirodr

Consegui já, valeu galera.

Criado 26 de março de 2011
Ultima resposta 26 de mar. de 2011
Respostas 6
Participantes 3