H2 Auto INC Primary Key & Insert

Letters90

Mitglied
Hi,

so sieht das create statement meiner tabelle aus:
Java:
public static void Create( Statement Stmt ) throws SQLException{
       Stmt.executeUpdate( "CREATE TABLE Tickets( TicketID INT PRIMARY KEY IDENTITY, KundenID INT, Kategorie VARCHAR(200), Prioritaet INT, Beschreibung VARCHAR(200), VorTicketID INT, Erstellt DATE, Abschluss VARCHAR(200) )" );
   }

so die frage die ich dazu jetzt habe, wenn ich über ein insert stmt einen wert einfüge wird dafür ein neuer primary key angelegt, gibt es einen eleganten weg diesen zum zeitpunkt der erstellung auszulesen?

ich kann mir denken das man einfach den letzten eintrag der tabelle auslesen könnte aber das scheint mir eine sehr unelegante lösung die dann aussetzt wenn mehrfach zugriffe auf eine datenbank stattfinden. oder muss ich den primary key doch programm intern selbst verwalten? ( das increment von hand programmieren )
 
T

Tomate_Salat

Gast
Nope, das übernimmt die DB. Dabei wird nicht nach dem letzten Wert geschaut, sondern eine fortlaufende Nummer vergeben. Was aber nicht der Fall ist: es wird kein neuer PK angelegt. Jede Tabelle kann nur einen haben und der PK ist auch eigentl. mehr eine Regel mit speziellen Zusätzen (erlaubt das setzen von Foreignkeys auf ein Feld, was mit normalen Constraints afaik nicht möglich ist). Das was für dich atm interessant ist, ist einfach: der PK definiert dass das Feld (hier:TicketID) eindeutig sein muss. Ein Insert mit einer bestehenden ID wäre somit nicht möglich.
 

Letters90

Mitglied
so die frage die ich dazu jetzt habe, wenn ich über ein insert stmt einen wert einfüge wird dafür ein neuer primary key angelegt, gibt es einen eleganten weg diesen zum zeitpunkt der erstellung auszulesen?

ich glaube ich habe mich nicht deutlich ausgedrückt. ich führe ein insert aus und mein problem dabei ist das ich nach dem insert nicht den wert des PK in meinem programm habe und einen eleganten weg suche den PK für den neuen eintrag auszulesen.
 

Evil-Devil

Top Contributor
Wieso willst du den vorher auslesen? Ich würde eher abfragen welche ID zuletzt generiert wurde über die offene Verbindung. Wenn du vorher schon die ID abfragst kann es passieren das zwischenzeitlich noch ein Insert ausgeführt wird. Dann wäre die ID die du erfragt hast nutzlos.

H2 hat doch sicher auch schema_information Tabellen oder? Bei MySQL kann man über die Tabellen den nächsten auto increment Wert abfragen.
 
T

Tomate_Salat

Gast
Du kannst dir ja den letzten Eintrag in der Tabelle holen. Der letzte Datensatz hat im autoinc-Feld immer den höchsten Wert. Wenn du mit zeitgleichen Zugriffen rechnest, dann kannst du ja in deinen Select noch die Felder im Where-Clause angeben, die du im Insert gefüllt hast.

Select absetzen, nach autoinc absteigend-Sortieren, ggf weitere Bedingungen im Where-Clause angeben und erstes Ergebnis nehmen. Das sollte dein Eintrag sein.
 

Evil-Devil

Top Contributor
und wie geht das :)?

Das sind ganz normale Tabellen die du über SQL abfragen kannst.
[sql]
SELECT `AUTO_INCREMENT` FROM information_schema.`TABLES`
WHERE `TABLE_SCHEMA` = 'NAME_MEINER_DATENBANK'
AND `TABLE_NAME` = 'NAME_MEINER_TABELLE';[/sql]

In den Information Schemes stehen alle Informationen zu jeder erzeugten Struktur. Denn MySQL muss auch irgendwie wissen wie die Tabellen aufgebaut sind, wenn man zb. den bösen * nutzt ;)
 
Zuletzt bearbeitet:
B

bERt0r

Gast
Javadoc Statement, funktioniert natürlich auch mit PreparedStatement:
getGeneratedKeys

public ResultSet getGeneratedKeys()
throws SQLException

Retrieves any auto-generated keys created as a result of executing this Statement object. If this Statement object did not generate any keys, an empty ResultSet object is returned.

Returns:
a ResultSet object containing the auto-generated key(s) generated by the execution of this Statement object
Throws:
SQLException - if a database access error occurs
Since:
1.4
 

Letters90

Mitglied
Vielen dank bertor, das war genau das was ich gesucht habe !

hier die erfolgreiche implementation:

Java:
public void Insert( ) throws SQLException{
       Stmt.executeUpdate("INSERT INTO Kunden ( Name, Nachname, Raum, Telefonnummer ) VALUES ( '" + Name + "', '" + Nachname + "', '" + Raum + "', '" + Telefonnummer + "' )", Statement.RETURN_GENERATED_KEYS );
       ResultSet Res = Stmt.getGeneratedKeys();
       Res.next();
       int PK = Res.getInt("KundenID");
   }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Auto Increment und nachträgliches einfügen Datenbankprogrammierung 5
M MySQL Auto-Increment einer custom formatted id? Datenbankprogrammierung 2
E MySQL Kann ID nicht zuweisen, obwohl diese Auto-Increment ist Datenbankprogrammierung 2
M Auto Primärschlüssel ? Datenbankprogrammierung 2
B H2 - Auto Commit abschalten Datenbankprogrammierung 3
G Größe auto increment ID? Datenbankprogrammierung 8
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
J SQL PRIMARY KEY unique Datenbankprogrammierung 5
S JPA, Primary Key wird nicht in relationstabelle erstellt Datenbankprogrammierung 3
G Primary key automatisch hochzählen Datenbankprogrammierung 9
G Primary key ID ermitteln? Datenbankprogrammierung 2
Y Probleme mit H2 und Primary Key Datenbankprogrammierung 4
M Kundennummer als Primary Key? Datenbankprogrammierung 43
G Herausfinden des Primary Keys nach INSERT-Kommando? Datenbankprogrammierung 4
S PRIMARY KEY erfragen Datenbankprogrammierung 3
D Primary-Key -> Fehler: "Unique constraint violation& Datenbankprogrammierung 12
A Primary Key Eigenschaft herausfinden Datenbankprogrammierung 2
M Primary Key ändern Datenbankprogrammierung 6
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
A MySQL Select und Insert in Java Datenbankprogrammierung 15
S PostgreSQL Bytea INSERT Datenbankprogrammierung 8
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
A Oracle insert Array in DB Datenbankprogrammierung 7
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
M Derby/JavaDB Derby SQL Insert mit AUTO_INCREMENT, welche ID wurde vergeben? Datenbankprogrammierung 6
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
B MS SQL: Insert LOB Datenbankprogrammierung 4
M MySQL INSERT will einfach nicht funktionieren Datenbankprogrammierung 9
H HSQLDB insert .... values("test1",select test2 from foo) Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
R vor/nach INSERT mysql-SETS absetzen Datenbankprogrammierung 2
C insert into mit between-Anweisung Datenbankprogrammierung 10
C Derby/JavaDB INSERT auf FOREIGN KEY schlägt fehl Datenbankprogrammierung 2
F Insert into Access Datenbankprogrammierung 3
S Nochmals: ID ermitteln nach Insert Datenbankprogrammierung 2
S ID Wert von Insert über jdbcTemplate.update Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
B SELECT ja - INSERT nein (MySQL) Datenbankprogrammierung 3
E Derby/JavaDB Keine Reaktion von "insert into" im ActionListener Datenbankprogrammierung 22
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
T MySQL Db select * und Insert schlagen fehl Datenbankprogrammierung 2
Kenan89 Insert ohne Auswirkung Datenbankprogrammierung 7
B MySQL myBatis INSERT Datenbankprogrammierung 13
E Access Datenbank mit Insert befüllen Datenbankprogrammierung 5
M Datenbankverbindung zu langsam beim Insert? Datenbankprogrammierung 6
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
R Derby/JavaDB Insert Statement Probleme Datenbankprogrammierung 14
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
S MySQL INSERT schlägt nicht fehl, fügt aber auch nichts ein Datenbankprogrammierung 13
S Probleme mit INSERT Befehl Datenbankprogrammierung 11
L MySQL Prepared Statement batch langsamer als bulk insert? Datenbankprogrammierung 10
M Insert in Table mit 250 Feldern Datenbankprogrammierung 2
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
A Insert Methode Syntaxfehler Datenbankprogrammierung 2
G INSERT DATE in Oracle-DB Datenbankprogrammierung 11
G ODBC Insert und gleich danach Selects Datenbankprogrammierung 8
Iron Monkey Insert into Spalte ID AUTO_INCREMENT Datenbankprogrammierung 7
C ID-Rückgabe bei INSERT Datenbankprogrammierung 5
D mysql insert - performance/robustheit, "best practice" Datenbankprogrammierung 15
M Hibernate: Insert statt Update Datenbankprogrammierung 8
C Rückgabe ob INSERT erfolgreich Datenbankprogrammierung 11
H Batch Update/Insert Datenbankprogrammierung 4
E Insert oder Update- Prüfung Datenbankprogrammierung 3
K DB2 Insert mit Subselect Fehler Datenbankprogrammierung 2
M Derby insert, ID auslesen Datenbankprogrammierung 3
W Problem bei Insert mit JDBC auf MS-SQL-Server 2005 Datenbankprogrammierung 7
G Frage zum Insert-Statement Datenbankprogrammierung 2
R Probleme mit Insert Datenbankprogrammierung 2
D Problem: Prepared Statement (Insert) funktioniert nicht. Datenbankprogrammierung 3
M Insert Update usw. Datenbankprogrammierung 2
P Insert into mit zwei Datenbanken Datenbankprogrammierung 3
S Insert mit Select Datenbankprogrammierung 6
G INSERT-STATEMENT Datenbankprogrammierung 6
M insert in 2 tabellen Datenbankprogrammierung 7
J Insert auf Access DB funktioniert nicht Datenbankprogrammierung 5
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
V Fehlermeldung beim Insert Datenbankprogrammierung 16
S Insert into , executeupdate oder executequery Datenbankprogrammierung 3
B PrepareStatement "Insert into" fehlermeldung Datenbankprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben