Hallo,
Ich hab eine MS SQL Datenbank (SQL Server Express 2008) und steuer die aus Java an mit dem 2005er Treiber. Java ist die Version 6 und ich entwickel unter Eclipse.
Klappt auch wunderbar.
Ich bastel grad so bißchen zum Üben von Java & der DB Anbindung, weil ich auch grad erst mit Java anfange, nen kleinen Datenbank Editor - also nur für paar wichtige Sachen.
Jetzt wollt ich eine AutoIncrement Spalte in die Tabelle einfügen - gemacht getan - wird angelegt.
Nun schreibe ich eine Zeile in die Tabelle. Es kommt obiger Fehler "Die 'Spalte1'-Identitätsspalte kann nicht aktualisiert werden."
Hier mal das Create:
und hier das Insert:
In Java verwende ich vom Statement den Batch-Mechanismus, um die Zeilen erstmal zum Batch hinzu zu fügen und dann auszuführen. Einzeln oder zusammen - funktioniert beides nicht.
Beim m_Statement.executeBatch(); wird die SQLException geschmissen.
Wenn ich aber nun das Insert-Statement direkt im SQL Server Manager ausführe, dann funktioniert sie.
Und jetzt kommt der Hammer - bevor ich den Code für das Erstellen des Insert-Statements geändert habe - also das war einfach nur ein anderer Algorithmus (die for-Schleifen sahen bißchen anders aus), wo dann das gleiche Statement bei rauskam (der alte Algorithmus hatte nur nen Problem, wenn die AutoIncrement-Spalte die letzte Spalte war) ... jedenfalls bin ich der Meinung nur das geändert zu haben ... na jedenfalls .... davor hatte es funktioniert.
Ich hab das schon auf Tabellen getestet, wo es vorher funktioniert hatte, auf neue Tabellen und in einer neuen Datenbank. Selbst nen Windows-Neustart half nichts.
.... und jetzt sitz ich hier schon paar Stunden und grübel vor mich hin, was ich denn da jetzt falsch/anders mache.
Jemand ne Idee, was ich noch ausprobieren könnte ?
Ich denke mal, irgendwelchen Source zu posten bringt nicht wirklich was - weil die Statements sind ja eigentlich richtig. Wenn ich doch was posten kann, dann sagt es bitte.
MFG,
speedy
Ich hab eine MS SQL Datenbank (SQL Server Express 2008) und steuer die aus Java an mit dem 2005er Treiber. Java ist die Version 6 und ich entwickel unter Eclipse.
Klappt auch wunderbar.
Ich bastel grad so bißchen zum Üben von Java & der DB Anbindung, weil ich auch grad erst mit Java anfange, nen kleinen Datenbank Editor - also nur für paar wichtige Sachen.
Jetzt wollt ich eine AutoIncrement Spalte in die Tabelle einfügen - gemacht getan - wird angelegt.
Nun schreibe ich eine Zeile in die Tabelle. Es kommt obiger Fehler "Die 'Spalte1'-Identitätsspalte kann nicht aktualisiert werden."
Hier mal das Create:
Code:
CREATE TABLE TestTabelle ( Spalte1 INT CONSTRAINT pk_Spalte1_1234489708313 PRIMARY KEY IDENTITY(1,1) NOT NULL, Spalte2 VARCHAR(256) NULL );
und hier das Insert:
Code:
INSERT INTO TestTabelle (Spalte2) VALUES ('String18');
In Java verwende ich vom Statement den Batch-Mechanismus, um die Zeilen erstmal zum Batch hinzu zu fügen und dann auszuführen. Einzeln oder zusammen - funktioniert beides nicht.
Beim m_Statement.executeBatch(); wird die SQLException geschmissen.
Wenn ich aber nun das Insert-Statement direkt im SQL Server Manager ausführe, dann funktioniert sie.
Und jetzt kommt der Hammer - bevor ich den Code für das Erstellen des Insert-Statements geändert habe - also das war einfach nur ein anderer Algorithmus (die for-Schleifen sahen bißchen anders aus), wo dann das gleiche Statement bei rauskam (der alte Algorithmus hatte nur nen Problem, wenn die AutoIncrement-Spalte die letzte Spalte war) ... jedenfalls bin ich der Meinung nur das geändert zu haben ... na jedenfalls .... davor hatte es funktioniert.
Ich hab das schon auf Tabellen getestet, wo es vorher funktioniert hatte, auf neue Tabellen und in einer neuen Datenbank. Selbst nen Windows-Neustart half nichts.
.... und jetzt sitz ich hier schon paar Stunden und grübel vor mich hin, was ich denn da jetzt falsch/anders mache.
Jemand ne Idee, was ich noch ausprobieren könnte ?
Ich denke mal, irgendwelchen Source zu posten bringt nicht wirklich was - weil die Statements sind ja eigentlich richtig. Wenn ich doch was posten kann, dann sagt es bitte.
MFG,
speedy