preparedStatement

7 respostas
pedroabs

Estou obtendo o seguinte erro na instrução abaixo:

"A posição do parâmetro '7' está fora da faixa. O número de parâmetros desta instrução preparada é '6'."

Alguem pode me ajudar?

String sql = "Update Livro set " +
                    "isbn = '?', " +
                    "pkgenero = ?, " +
                    "titulo = '?', " +
                    "autor = '?', " +
                    "origem = ?, " +
                    "ano = ?, " +
                    "edicao = ?, " +
                    "paginas = ?, " +
                    "editora = '?' " +
                    "where pklivro = ?";



            pstmt = conn.prepareStatement(sql);

            pstmt.setString(1, livro.getISBN());
            pstmt.setInt(2, livro.getGenero().getId());
            pstmt.setString(3, livro.getTitulo());
            pstmt.setString(4, livro.getAutor());
            pstmt.setInt(5, livro.getOrigem());
            pstmt.setInt(6, livro.getAno());
            pstmt.setInt(7, livro.getEdicao());               --->> O erro se  bem nesta linha !!!
            pstmt.setInt(8, livro.getPaginas());
            pstmt.setString(9, livro.getEditora());
            pstmt.setInt(10, livro.getId());

            pstmt.executeUpdate();

7 Respostas

fabim

Tire as aspas das interrogações. Isso esta fazendo com que alguns parametros seus sejam ignorados, pois ele espera ?, sem aspas, e nao '?'
Vc nao precisa por aspas qdo for String. O preparedStatement ja faz isso.

ramilani12

Evite essa concatenação utilize StringBuffer ou StringBuilder

StringBuffer sql = new StringBuffer();
sql.append("Update Livro set  ")
.append( "isbn = ?  ");

pstmt = conn.prepareStatement(sql.toString());

Simples exemplo

T

ramilani12:
Evite essa concatenação utilize StringBuffer ou StringBuilder

StringBuffer sql = new StringBuffer();
sql.append("Update Livro set  ")
.append( "isbn = ?  ");

pstmt = conn.prepareStatement(sql.toString());

Simples exemplo

Aham - o jeito de o PedroAbs usar é que é o correto, já que o compilador percebe que você está tentando concatenar pedaços constantes de uma string e salva tudo como se fosse uma string só. Além disso, é mais claro.

ramilani12

Thingol prefiro utilizar StrinBuffer prq a leitura fica bem melhor 8)

fabim

Ha casos e casos.

Nao convem usar StringBuffer/Builder pra:

String sql = “UPDATE TABELA SET DT_DESATIVACAO = SYSDATE WHERE ID_REGISTRO = ?”;

Bem menos custoso do que um new

fabim

Acrescentando:

Ali em cima vc apenas criou uma String;

Aqui:

"StringBuffer sql = new StringBuffer();

sql.append("Update Livro set  ")

.append( "isbn = ?  ");  "

Vc cria uma String e um objeto StringBuffer

ramilani12

Sim,
mas imagine um sql de 30 linhas ou mais …

Criado 9 de fevereiro de 2009
Ultima resposta 9 de fev. de 2009
Respostas 7
Participantes 4