# Netbeans 5.5 Visual Web Pack Problem mit INSERT und PK



## SubSonniC (25. Feb 2007)

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.


```
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]_


----------



## Guest (26. Feb 2007)

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.


----------



## SubSonniC (26. Feb 2007)

Ja Danke für den Hinweis.

Nur bringt mich das nicht weiter.


----------



## HaBaLeS (28. Feb 2007)

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 (1. Mrz 2007)

...also..
	
	
	
	





```
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 

```
pkRowSet.execute()
```
einfach
	
	
	
	





```
pkRowSet.execute(<connection>)
```
mfg
DocRandom


----------

