Galera preciso da ajuda de voces para resolver este problema.
Em um operação eu vou inserir mais de um linha, portanto adiciono em um bacth.
PreparedStatementstmt=con.prepareStatement("INSERT INTO Tabela VALUES (?, ?)");id=getAutoIncrement("Tabela","id");stmt.setInt(1,id);stmt.setString(2,"Kelly Kaufmann");stmt.addBatch();stmt.setInt(1,id+1);stmt.setString(2,"Bill Barnes");stmt.addBatch();int[]updateCounts=stmt.executeBatch();
este método que getAutoIncrement faz um select na Tabela e pega o max do coluna id e soma 1.
O problema é: E se eu tiver mais de uma pessoa execundo este método de insert…?
O banco de dados que está usando não tem suporte built-in para este tipo de chave primária?
Caso contrário, há algumas soluções possíveis:
a. sincronizar o método: problemático. Se há vários clientes acessando o método, haverá lentidão.
b. criar uma classe “geradora de ids” que tem um buffer com X ids criados. O método getId() desta classe também é sincronizado, mas retorna sempre rapidamente.
thingol então a solução é alterar esta minha coluna para auto númerica? Estou usando SQL-Server.
thingol mais se eu tiver que usar outro banco de dados?
Licuri
LIPE:
b. criar uma classe “geradora de ids” que tem um buffer com X ids criados. O método getId() desta classe também é sincronizado, mas retorna sempre rapidamente.
thingol então a solução é alterar esta minha coluna para auto númerica? Estou usando SQL-Server.
thingol mais se eu tiver que usar outro banco de dados?
PostgreSQL suporta (através de sequences e do tipo de dados “Serial” (que nada mais é que um Integer associado a uma sequence)), Oracle suporta e SQL Server suporta. Não sei sobre outros mas, em último caso, você pode tentar fazer algum middle-tier.