Az adatbázisban az ID-adás, -minden újraindításnál- 100-zal többről kezdődik.

0 értékelés
96 megtekintés
kispopey (30 pont) kérdezte Már 24.

Sziasztok.

A programom "első" indításakor az adatbázis 1-től elkezdi kiosztani az ID-kat, viszont, ha a programot újraindítom, akkor a "második" indításnál már 101-től osztja az ID-kat.
Szeretném, hogy ha a 6. file-nál lépek ki a programból, akkor a következő indításnál, új adat bevitelekor, az a 7-es ID-t kapja.

Adattábla létrehozása:

ResultSet rs = dbmd.getTables(null, "APP", "NUMBERS", null);
            if(!rs.next())
            {
             createStatement.execute("create table numbers (id INT not null primary key GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),getNum INT)");
            }

Új szám hozzáadása:

        String sql = "insert into numbers (getNum) values (?)";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        preparedStatement.setInt(1, Integer.parseInt(number.getGetNum()));
        preparedStatement.execute();

Előre is köszönöm szépen a segítséget!

Krisz Guru (1,958 pont) szólt hozzá Már 27.
Milyen adatbázist használsz?
kispopey (30 pont) szólt hozzá Már 27.
A JDBC kurzusban létrehozott Derby adatbázist.

1 Válasz

0 értékelés
tkiss Haladó Felhasználó (132 pont) válaszolta meg Szep 13.
Krisz kiválasztva Szep 15.
 
Legjobb válasz

Szia,

Ez a Derby-s preallocator-nak köszönhető(https://db.apache.org/derby/docs/10.9/ref/rrefproperpreallocator.html), ami előre allokál x darab értéket(ez a szám alapból 100) a sequence-nek.

Két lehetőséged van:

  • A default 100-as értéket állítod át 1-re a "derby.language.sequence.preallocator" property-nél.
  • Az alkalmazás leállításánál leállítod a derby-t is(ezzel a fel nem használt értékeket eldobja) a JDBC URL-hez téve a következőt: ";shutdown=true" . Ehhez elvileg(nem próbáltam ki) elég beraknod az alábbi osztályt:

@Component
public class DerbyShutDown
{
    @Value("${spring.datasource.url}")
    private String connectionURL;

    @PreDestroy
    public void shutdown() {
        System.out.println("Shutting down DB.");
        try {
            DriverManager.getConnection(connectionURL+";shutdown=true");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Üdv.: Tamás

...