Netbeans 5.5 Visual Web Pack Problem mit INSERT und PK

Status
Nicht offen für weitere Antworten.
S

SubSonniC

Gast
Hallo,

also ich hab langsam alles ausprobiert was mir so einfällt.

Doch ich stoße immer wieder auf das Problem mit dem Primary Key.
Die erste Zeile fügt er mir ein mit ID als primary Key 0

wenn ich dann eine zweite zeile einfügen will sagt er mir

Caused by: java.lang.RuntimeException: Number of conflicts while synchronizing: 1 SyncResolver.INSERT_ROW_CONFLICT row 1 Column 'ID' cannot accept a NULL value.

wieso zählt er den value nich hoch?
ich verstehe das einfach nicht. Kann mir da jemand helfen das besser zu verstehen.

Ich arbeite mit Netbeans 5.5 Virsual Web Pack.
Es geht um den java Code von Page1 bei einer neuen Projekt und einer Derby DB unter verwendung von Tomcat

Hier mein entscheidener Code.

Code:
private Integer nextPK() throws java.sql.SQLException {

CachedRowSetXImpl pkRowSet = new CachedRowSetXImpl();
try {

pkRowSet.setDataSourceName(null);

pkRowSet.setCommand("SELECT MAX(SUBSONNIC.PERSONEN.ID) + 1 FROM SUBSONNIC.PERSONEN");

pkRowSet.setTableName("SUBSONNIC.PERSONEN");

pkRowSet.execute();
pkRowSet.next();

int counter = pkRowSet.getInt(1);
log ("New PK is :" + counter);
return new Integer(counter);
}catch(Exception e) {
error("Error fetching Max(PERSONID)+1 : " +e.getMessage());
}finally {
pkRowSet.close();
}
return null;
}


public String datensatzINSERT_action() {

try {
if ( personenDataProvider.canAppendRow() ) {
RowKey appendedRow = personenDataProvider.appendRow();
if ( appendedRow != null ) {

personenDataProvider.setValue("ID", appendedRow, nextPK());
personenDataProvider.setValue("FIRST_NAME", appendedRow, new String(insertFIRSTNAME.getText().toString()));
personenDataProvider.setValue("LAST_NAME", appendedRow, new String(insertLASTNAME.getText().toString()));

personenDataProvider.commitChanges();
}
} else {
error("Cannot append row");
}
} catch (Exception e) {
throw new FacesException(e);
}

return null;
}
[Edit by Beni: Codetags]
 
G

Guest

Gast
Ehrlich gesagt kenne ich CachedRowSetXImpl nicht, doch eine kleine Anmerkung an deinem Code. Warum dekl. du throws SQLException wenn du alle Exceptionen abfängst? Und danach null zurück zugeben ist auch keine gute Lösung. Da du in der nächsten Aktionen eine NullPionterExc. erhälts.

Ändere

catch(Exception e) -> catch(SQLException e) {
....
throw new SQLException(e);

dann kannst du dir return null sparen.
 
S

SubSonniC

Gast
Ja Danke für den Hinweis.

Nur bringt mich das nicht weiter.
 
H

HaBaLeS

Gast
Kann es vielleicht was damit zu tun haben, das wenn du eine gültige ID bekommst das close nicht aufrufs? KEine ahung wie sich deine DB da verhält wenn nicht sauber aufgeräumt wird.
 

DocRandom

Top Contributor
...also..
Code:
pkRowSet.setDataSourceName(null);
..kommt mir komisch vor!
Solltest Du da nicht die DataSource angeben?
Wenn Du schon mit ner bestehenden Connection arbeitest, ist obiger Befehl ohnehin obsolet, denn dann machst aus
Code:
pkRowSet.execute()
einfach
Code:
pkRowSet.execute(<connection>)
mfg
DocRandom
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben