# verschachtelte SQL-Statements



## schnoupf (20. Dez 2006)

hi leute, ich habe hier ein Problem mit  "verschachtelten" SQL-Anweisungen:

```
if (query.getQuery()) {
				ResultSet res = query.getResult();
				
				String old_mtrx_id = "";
				while(res.next()) {
					//einfügen der neuen Datensätze in TBL_MTRX
					old_mtrx_id = res.getString(1);
					sql = 	"INSERT INTO TBL_MTRX(fz_id, sp_id,ls_id,_ref_zgs,status,serie) VALUES('"
							+res.getString(2)+"','"+new_id+"','"+res.getString(4)+"','"
							+res.getString(5)+"','0','"+res.getString(7)+"')";



					stmt.close();


					update.setStmt(stmt);
					update.setSql(sql);
					
					if ((update.getResult()) > 0) {
						out.println("Datensatz in TBL_MTRX uebernommen");
					}
					else {
						out.println(update.getAusgabe());
					}
					
					//auslesen der mtrx_id des neu angelegten Datensatzes
					sql = 	"SELECT MAX(mtrx_id) FROM TBL_MTRX";
					
					int new_mtrx_id = 0;


					stmt.close();


					query.setStmt(stmt);
					query.setSql(sql);
					if (query.getQuery()) {
						ResultSet res2 = query.getResult();
						res2.next();
						new_mtrx_id = Integer.parseInt(res2.getString(1));
					}
					else {
						out.println("Kann new_mtrx_id nicht auslesen");
					}
					
					//einfuegen des Auftrags in TBL_AUFT
					sql =	"INSERT INTO TBL_AUFT(mtrx_id_old_slp,mtrx_id_new_slp, slp_id_old, slp_id_new, slp_bearb, slp_kem, status)"
							+"VALUES('"+old_mtrx_id+"','"+new_mtrx_id+"','"+data+"','"+new_id+"','fehlt noch','9')";
					


					stmt.close();		



					update.setStmt(stmt);
					update.setSql(sql);
					
					if ((update.getResult()) > 0) {
						out.println("Datensatz in TBL_AUFT geschrieben");
					}
					else {
						out.println("Kann Datensatz nicht in TBL_AUFT schreiben");
					}
				}
			}
			else {
				out.println("Kein Datenbank-Connect moeglich");
			}
```


das Problem ist glaube ich das das Statement der ersten Abfrge noch in Verwenung ist während ich versuche mit dem selben Statement die nächste Abfrage zu starten. Wie kann ich also das Statement zurücksetzen.

Mit 

```
stmt.close();
```
 kommt die Exception "Objekt wurde abgeschlossen"
bei

```
stmt = null;
```
 kommt ne NullPointerException bei der ersten INSERT-Anweisung.

Danke für eure Hilfe

ben[/code]


----------



## SlaterB (20. Dez 2006)

ein Statement zu recyclen geht vielleicht nicht,
was spricht gegen ein neues?
connection.getStatement() oder wie auch immer das heißt


----------



## schnoupf (20. Dez 2006)

dankeschön das hat geholfen, habe in meiner Bean einfach ein 2tes Statement angelegt das dann die verschachtelten Anweisungen ausführt...

gruß schnoupf


----------

