# eigenartiges Java/mysql problem



## firstaid (26. Jan 2009)

Hi Leute,

vielleicht könnt ihr mir bei meinem eigenartigen Phänomen helfen.

Hab hier ne Java-Applikation die auf 3 Mysql Server zugreift und Daten abgreift. Die Connections werden sauber hergestellt und Daten können schön abgefragt und weiter verarbeitet werden.

Leider kommt nun das Problem:
Nach einigen erfolgreichen Abfragen im Programm bekomm ich plötzlich nur noch leere ResultSets zurück, sogar wenn ich eine Abfrage oder einen Programmaufruf nehme der 3 Zeilen oberhalb noch funktioniert.

Hat einer von euch schon mal so ein Problem gehabt? bzw eine Ahnung woran sowas liegen kann?

Wäre für jeden Tip dankbar.

greetz


----------



## HoaX (26. Jan 2009)

ich tippe mal schwer das liegt an schlechter programmierung, verschluckten exceptions, ...


----------



## firstaid (26. Jan 2009)

exceptions werden sauber abgefangen

bsp: wenn ich einen tabelle angebe die es nicht gibt kommt sofort die entsprechende fehlermeldung

bei korrekter abfrage wird kein ergebnis zurückgeliefert obwohl die gleiche abfrage beim aufruf davor noch funktioniert


----------



## musiKk (26. Jan 2009)

Wenn es sich nicht um einen bekannten Java- oder MySQL-Bug handelt (was du natürlich schon überprüft hast ), dann wird es ohne Quelltext wohl schwierig, eine Diagnose oder gar Lösung zu erstellen.


----------



## Ebenius (26. Jan 2009)

Baust Du die Verbindungen wieder ab? Hast Du eventuell UPDATE-Statements, die den Transaktionsrahmen nicht schließen und deshalb nachfolgende SELECTs oder UPDATEs blockieren? ... Sowas würde ich überprüfen. Immer nach der Benutzung eines Statements 
ResultSet schließen
Statement schließen
Ggf. (falls die Verbindungen später neu aufgemacht werden) Connection schließen


----------



## firstaid (26. Jan 2009)

den ganzen code zu posten wäre etwas viel

aufbau der verbindung (funktioniert, da schon vorher aus dieser conn ergebnisse kommen)


```
DbSource(){
		
		 // import Driver
	    try {
	        Class.forName("com.mysql.jdbc.Driver");
	    } catch (Exception ex ) {
	        throw new RuntimeException(ex);
	    }
	    
	    final Config config = new Config();
	    
	    // connection
	    
		//oewaconfDB
	    String jdbcConnectsource = "jdbc:mysql://" + (String)config.hostLookup.get(Config.source) +
	    	"/" + (String)config.dbLookup.get(Config.source) +
	    	"?user=" + (String)config.userLookup.get(Config.source) +
	    	"&password=" + (String)config.passLookup.get(Config.source);
	    try {
	    	
	    	this.source = DriverManager.getConnection(jdbcConnectsource);
	    	TicketImporter.log("Verbunden mit source");
	    } catch (SQLException ex) {
	    	throw new RuntimeException(ex);
	    }        
	}
```

die abfragen die ähnlich sind funktioniere, das ist die erste die dann nimmer will (zu testzwecken nur noch ein select *)


```
public String[] usedOrgcats(String sitename, Date lastImport, String agg) {
		try {
			final ResultSet rsOrgcats = source.createStatement().executeQuery("Select * from Boxes");
			
			
			System.out.println(rsOrgcats.getFetchSize());
...
```

die abfrage wird definitiv abgesetzt denn wenn ich einen fehler in das sql-statement reinbringe (zb nen typo "slect * ...") kommt einen exception mit der sql fehlermeldung


man kann also sehen das es ein komplett neues resultset ist. hab auch schon getestet direkt vor dem aufruf der funktion die verbindung neu aufzubauen usw....

immer das gleiche die abfrage liefert 0 results zurück, was bei einer tabelle die daten enthält und mit select * angesprochen wird irgendwie nicht vorstellbar ist

edit: die sqls davor sind auch nur selects sollten daher die db/tabelle nicht blockieren


----------



## Ebenius (26. Jan 2009)

```
final ResultSet rsOrgcats = source.createStatement().executeQuery("Select * from Boxes");
```
Erklär mir mal, wie Du dieses Statement wieder schließt, hm?


----------



## firstaid (27. Jan 2009)

davor werden 2 resultsets geöffnet 

eines bildet eine schleife drumherum (kann also nicht geschlossen werden) und das 2te wird mittel .close() geschlossen.


----------



## Ebenius (27. Jan 2009)

firstaid hat gesagt.:
			
		

> davor werden 2 resultsets geöffnet
> 
> eines bildet eine schleife drumherum (kann also nicht geschlossen werden) und das 2te wird mittel .close() geschlossen.


Ich rede aber nicht vom *ResultSet* sondern vom *Statement*.


----------



## firstaid (27. Jan 2009)

sorry ist noch etwas zu früh

öhm gute frage ;-)


----------

