# INSERT abfragen ob erfolgreich?



## Guest (31. Jul 2007)

Hallo,

ich hab ein Problem.


Ich bastel gerade an einer Funktion die mir den PrimaryKey aus der Tabelle holen soll.
Hab da auch schon eine IDEE wie ich das mache.
Anschließend möchte ich den wert um eins erhöhen und wieder in die Datenbank schreiben.
Da ich nicht der einzige bin der das machen wird, muss ich abfragen ob der Insert erfolgreich war.

Wie mache ich das?

code bis jetzt!


```
package Db.PrimKey;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class PrimKey {
	public static void main(String[] args){
		String tab = "person";
		String feld = "pers_nr";
		ResultSet rs = null;
		Integer prim_nummer = null;
		try {
			Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
			Connection con = DriverManager.getConnection("jdbc:db2:DB", "fsw", "fsw");
			
			
			
			rs = con.createStatement().executeQuery("SELECT MAX ("+feld+") AS "+feld+" FROM "+tab);
			rs.next();
			prim_nummer = Integer.valueOf(rs.getString(feld)).intValue();
			prim_nummer++;
			System.out.println("Neuer PrimKey :"+tab+" "+prim_nummer);
			
			rs = con.createStatement().executeQuery("INSERT INTO "+tab+" VALUES "+prim_nummer);
			
		} catch (Exception e) {
			e.printStackTrace();

		}
	}
}
```


----------



## SlaterB (31. Jul 2007)

wann ist denn ein Insert nicht erfolgreich, kannst du das nachstellen?
gibts dann keine Exception?

Insert gibt bei dir mit executeQuery ein ResultSet zurück?
normalerweise funktioniert das nur mit executeUpdate,
da bekommt man dann auch noch einen Rückgabewert, der z.B. die Anzahl der erzeugten/ geänderten Zeilen angibt


----------



## P3AC3MAK3R (31. Jul 2007)

Macht in so einem Fall nicht der Einsatz einer Sequenz Sinn?  ???:L


----------



## Guest (31. Jul 2007)

P3AC3MAK3R hat gesagt.:
			
		

> Macht in so einem Fall nicht der Einsatz einer Sequenz Sinn?  ???:L



das will ich machen, bzw. das mache ich doch!

mit welchem befehl bekomme ich zurück ob es erfolgreich war oder wie viele Zeilen er geändert hat?


----------



## P3AC3MAK3R (31. Jul 2007)

Wenn man eine Sequenz richtig verwendet, braucht man sich aber manuell gar nicht um die Vergabe bzw. Erhöhung des entsprechenden Wertes zu kümmern...

Hier ein Artikel zu dem Thema:
http://www.ibm.com/developerworks/db2/library/techarticle/0302fielding/0302fielding.html


----------



## tuxedo (31. Jul 2007)

@Gast

Wenn du statt executeQuery ein executeUpdate benutzt, wird alles besser 



> int java.sql.Statement.executeUpdate(String sql) throws SQLException
> Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.
> 
> Parameters:
> ...


----------

