Quando faço um UPDATE com o HSQLDB, a linha atualizada passa a ser a última linha da tabela

Estou tentando fazer um UPDATE no HSQLDB, fornecendo uma condição WHERE para a linha que eu quero atualizar. A linha é atualizada, porém ela passa a ser a última linha da tabela. A coluna é atualizada, os demais valores permanecem os mesmos, porém a posição da linha na tabela é alterada. E quando faço um SELECT, a posição da linha vem como está na tabela (trocada).

É como se o HSQLDB apagasse a linha que desejo alterar e inserisse uma nova linha com os valores que desejo.

O único jar que importei para o meu projeto foi o hsqldb.jar. Estou usando o Open JDK 12.

Observe a questão de ordenação.

Talvez o código sql que popula a tabela inicialmente ou o de update devem estar com algum tipo de ordenação.

tente manter a mesma ordenação tipo…

select * from tabela ORDER BY id;

UPDATE tabela SET nome = ‘Jose’ WHERE id = 1 ORDER BY id;

você ainda pode usar DESC ou ASC ao final de cada instrução.

Não testei mas deve funcionar

1 curtida

Quando eu populo a tabela, tem uma coluna que armazena a ordem dos valores, indo de 1 à 3 (são poucos valores, mas são valores que devem ser calculados, então pensei em deixar eles armazenados para não ser preciso recalcular esses valores toda vez que o bd fosse aberto no programa).

Talvez eu insira uma segunda coluna indo de 1 à n, ficando os valores armazenados na seguinte ordem: valor-1-1; valor-2-1; valor-3-1; valor-1-2; valor-2-2; valor-3-2; …

Pensei em usar um ORDER BY no SELECT para retornar sempre os valores na ordem que eu preciso. Mas antes de fazer isso (ou buscar outro bd gratuito), pensei em ver se alguém já teve esse problema… Se sou eu quem está fazendo algo errado ou se é um bug do HSQLDB. Se tem solução…

Dos três bd que já usei, o HSQLDB é o único que está gerando esse erro, os outros deixam a linha no mesmo lugar.

Tentei o UPDATE com o ORDER BY e gerou erro na string sql (“unexpected token: ORDER in statement [UPDATE MatrizJ SET Valor = ? WHERE Linha = ? ORDER BY Linha]”).