Problema com ResultSet

2 respostas
Vinny

Bom galera eu estou com um pequeno probleminha
que eu não sei oque é

é o seguinte eu estou tentando inserir informações em uma tabela
do meu banco de dados so que o seguinte erro:

28/07/2009 22:56:45 balizamento.dlgClassic gerarResultado
SEVERE: null
org.firebirdsql.jdbc.FBResultSetNotUpdatableException: Underlying result set does not contain all columns that form 'best row identifier'.
        at org.firebirdsql.jdbc.FBRowUpdater.getParameterMask(FBRowUpdater.java:251)
        at org.firebirdsql.jdbc.FBRowUpdater.executeStatement(FBRowUpdater.java:547)
        at org.firebirdsql.jdbc.FBRowUpdater.insertRow(FBRowUpdater.java:471)
        at org.firebirdsql.jdbc.FBResultSet.insertRow(FBResultSet.java:2479)
        at balizamento.dlgClassic.gerarResultado(dlgClassic.java:216)

Eu não sei oque pode ser isso, eu ja verfiquei se é algum campo que eu possa ta inserindo
null mas tb não é isso e a tabela tb tem todas as coluna que eu estou querendo inserir!
alguem poderia me diser oque pode estar calsando este erro?

O meu codigo é este:

do
            {
                    if ((Integer) vetNum.elementAt(0)!=prova)
                    {
                        prova = (Integer) vetNum.elementAt(i);
                        pos=1;
                    }
                    rs = st.executeQuery("SELECT * FROM RESULTADO;");
                    rs.moveToInsertRow();
                    rs.updateInt(1, (Integer) vetNum.elementAt(i));
                    rs.updateString(2, (String) vetDesc.elementAt(i));
                    rs.updateInt(3,(Integer) vetSerie.elementAt(i));
                    rs.updateInt(4, (Integer) vetRaia.elementAt(i));
                    rs.updateString(5, (String) vetNome.elementAt(i));
                    if ((Integer) vetCbda.elementAt(i)>0)
                       rs.updateInt(6, (Integer) vetCbda.elementAt(i));
                    rs.updateInt(7, (Integer) vetAno.elementAt(i));
                    rs.updateString(8, (String) vetClube.elementAt(i));
                    rs.updateInt(9, pos++);

                    //O erro da aqui na hora de inserir a nova linha
                    rs.insertRow();
                    rs.moveToCurrentRow();
                    i++;
                
            }while (i<vetNum.size());

2 Respostas

ivela

Olá!

Aparentemente seu banco não suporta esta operação. Já checou a documentação dele?

soro

Bom, pelo que estou vendo, você faz um INSERT em todas as columas da TABELA.

Se você reparar, existe uma condição IF entre um dos campos para inserção.

Você tem que lembrar o seguinte: Se essa condição retornar FALSE, ele não vai inserir e o seu INSERT vai ficar faltando 1 campo, porém se esse campo não for auto incremental e não aceitar NULL, pode ocorrer erros. Mas pelo erro, acho que ele nescessita que você sete todos os campos.

Nunca usei este método insertRow();

Sempre faço com PrepareStatement

Sempre colocando a String SQL com ?

E definindo os campos com setTipo(numeral, valor);

Melhorando: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/PreparedStatement.html

Reveja seu código.

Criado 28 de julho de 2009
Ultima resposta 29 de jul. de 2009
Respostas 2
Participantes 3