# Probleme mit ResultSet und getString(i)



## Aimee (11. Sep 2006)

Hallo,

da bin ich wieder..   

Folgendes.. Ich lese Daten aus einer Datenbank aus und schicke sie weiter um sie in eine XML-Datei zu schreiben und an anderer Stelle wieder aus zu lesen.


```
ArrayList l = new ArrayList();
	    try {	    		
			String query =  "select " + string + " Tabellenname";
			rs2 = st.executeQuery(query);
	    	        ResultSetMetaData rsmd = rs2.getMetaData();
	    	
		         int i, n = rsmd.getColumnCount();
	    	        while( rs2.next() ) 
		       {
	    		        ArrayList sptab = new ArrayList();
		    	        for( i=1; i<=n; i++ )  {
		    		  ArrayList sp = new ArrayList();
		    		  // Spaltenname - > Wert	    		
		    		  sp.add(rsmd.getColumnName( i ));
		    		
		    		  if(rs2.getString( i ) != null) {	
                                         //PROBLEM 
		    			sp.add(rs2.getString(i));
		    		  } else {
		    			sp.add(" ");
		    		  }
		    		
		    		sptab.add(sp);
		    	}	
		    	l.add(sptab);
		    }
	    	
	    } catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
	    }
	    return l;
```

rs2.getString(i) bereitet mir nun große Sorgen.. Habe es schon auf String gecastet,mit toString() gearbeitet und dennoch mag XML bei writeCharakter das Teil nicht..

Nehme ich testweise ein " TEST " oder gar rsmd.getColumnName( i ) ist alles schön.. Aber ich brauche ja die Daten als String. Und irgendwas stimmt da nicht so das XML dann Probleme bekommt beim lesen..

Gibt es noch eine andere Möglichkeit an die Daten zu kommen ohne das rs2.getString(i)??? Ich weiß nicht was da los ist??



 ???:L


----------



## thE_29 (11. Sep 2006)

if(rs2.getString( i ) != null) {   
                                         //PROBLEM
                   sp.add(rs2.getString(i));

das geht nicht!

Du kannst einen Index nur EINMAL holen!

Dh, du musst das so machen!


```
String tmp = rs2.getString(i);
if(tmp != null)
 sp.add(tmp);
```


Also generell zu merken: ResultSet Ergebnisse können nur einmal geholt werden!


----------



## Aimee (11. Sep 2006)

Danke! 
Es hat sich leider aber nichts geändert..  ???:L 


```
String tmp = rs2.getString( i );
 if(tmp != null) {	
  sp.add(tmp);
 } else {
  sp.add(" ");
 }
```


----------



## thE_29 (11. Sep 2006)

Was für nen Fehler kommt den bei dem XML Zeugs?


----------



## Aimee (11. Sep 2006)

javax.xml.stream.XMLStreamException
	at com.bea.xml.stream.MXParser.fillBuf(MXParser.java:3367)
	at com.bea.xml.stream.MXParser.more(MXParser.java:3382)
	at com.bea.xml.stream.MXParser.parseProlog(MXParser.java:1861)
	at com.bea.xml.stream.MXParser.nextImpl(MXParser.java:1839)
	at com.bea.xml.stream.MXParser.next(MXParser.java:1261)
	at com.bea.xml.stream.MXParser.setInput(MXParser.java:727)
	at com.bea.xml.stream.MXParserFactory.createXMLStreamReader(MXParserFactory.java:235)
	at com.bea.xml.stream.MXParserFactory.createXMLStreamReader(MXParserFactory.java:51)
	at com.bea.xml.stream.MXParserFactory.createXMLEventReader(MXParserFactory.java:125)


Allerdings habe ich es eben bis zu der SQL - Abfrage zurück verfolgt.. Und das seltsame ist ja nehme ich den String aus

rsmd.getColumnName( i ) geht es ja ohne Fehler und ohne Probleme.. Deshalb frage ich mich wo der Unterschied ist zwischen einem String aus rsmd.getColumnName( i )  und einem String aus rs2.getString( i )  ???:L 

Ich verwende sozusagen rsmd.getColumnName( i ) als Name für den TAG und  rs2.getString( i ) als Inhalt. Schreiben tut er es auch noch ohne Probleme und dann beim lesen des Inhalts kracht es mit oben genannten Fehler.. Da es aber funktioniert wenn ich "TESTSTRING" oder rsmd.getColumnName( i ) als Inhalt übergebe denke ich nicht das es an XML liegt...

Seltsam eben... Meine API ist übrigens StAX! 

 ???:L


----------



## thE_29 (11. Sep 2006)

Also wenn du statt rs2.getString(i) String tmp = "TESTSTRING" nimmst und das dazuhängst, klappt das?

Bzw, das sp.add(tmp); ist dass das dazuhängen?


----------



## Aimee (11. Sep 2006)

thE_29 hat gesagt.:
			
		

> Also wenn du statt rs2.getString(i) String tmp = "TESTSTRING" nimmst und das dazuhängst, klappt das?
> 
> Bzw, das sp.add(tmp); ist dass das dazuhängen?



Ja genau... Wenn ich "TESTSTRING" anhänge dann klappt es.. Oder eben auch den Spaltennamen.. Der klappt auch...

und genau das sp.add(tmp) ist das wo ich es dran hänge.. Und das ist halt das was mich verzweifeln lässt.. Warum klappen die anderen Strings nur das aus rs2.getString(i)  nicht.. Da hab ich jetzt schon die wildesten Dinge ausprobiert aber nichts hilft..   

 ???:L


----------



## thE_29 (11. Sep 2006)

Die Datei kann geschrieben werden oder?

Was steht den da bei der Position wo es beim XML einlesen wieder Probleme gibt!


----------



## Aimee (11. Sep 2006)

Ja die Datei wird geschrieben.. Und gefüllt wird es:


```
XMLStreamWriter writer = writexml(path);
			
writer.writeStartDocument();
writer.writeStartElement( "DataImport" );
			
for (int i = 0; i < knvdata.size(); i++) {
  ArrayList a = (ArrayList)knvdata.get(i);
				
  for (int j = 0; j < a.size(); j++) {	
    ArrayList a2 = (ArrayList)a.get(j);
       // TagName aus rsmd.getColumnName( i )
    writer.writeStartElement( (String) a2.get(0) );
    if(a2.get(1) != null) {			
	// Inhalt aus rs2.getString(i)
	writer.writeCharacters( (String) a2.get(1));
    } else {
	writer.writeCharacters(" ");
    }					
    writer.writeEndElement();
  }
				
}

writer.writeEndElement();
writer.writeEndDocument();
writer.close();
```

Ausgelesen: Er kommt aber nicht mal über den parser hinweg.. Er kommt also nicht zum auslesen..





```
FileInputStream in = new FileInputStream(pfad);
			
			XMLInputFactory factory = XMLInputFactory.newInstance();

                         // HIER folgend ist dann schon CRASH
			XMLEventReader parser = factory.createXMLEventReader(in);

                         
                       //parsernutzung aber soweit kommt er erst gar nicht..
```

wie gesagt läuft es mit allen anderen durch nur mit dem rs2.getString nicht..  ???:L  :bahnhof: Selbst wenn ich die seltsamsten Strings übergebe läuft es...

Ich verzweifel noch an dem Ding.. Habe es auch mit rs2.getObject versucht.. Genau das selbe... 

 :bahnhof:


----------



## thE_29 (11. Sep 2006)

Zeig die Datei her die erstellt wird, bzw den Datensatz


----------



## Aimee (11. Sep 2006)

Kann das sein das der ß nicht mag???  ???:L 

Wollte dir nicht die 60MB XML-Datei zumuten und habe ein Stück raus genommen.. Und dann hatte ich dort Datensatz für Datensatz getestet und bei <NAME>Geb. 285/Außen</NAME> hat er gestreikt... Habe das ß weg genommen und der Datensatz lief durch..

Sche***.. Wenn das nur das ist..


----------



## Aimee (11. Sep 2006)

Shit.. Es läuft durch...  :roll: 

 ß ö ü ä Ö Ü Ä mussten ausgetauscht werden...      :autsch:


----------



## thE_29 (11. Sep 2006)

Du musst das als CDATA Objekt abspeichern, damit XML auch Sonderzeichen oder Befehle zulässt!

<![CDATA[ blablaßßäöäü ]]>

So muss das drinnenstehen!

Ein paar Parser haben eigene Methoden fürs CDATA putten!

Es wäre ja das gleiche wenn du ein < oder > abspeichern willst, das machst du auch mit sowas!


----------



## Aimee (13. Sep 2006)

Danke noch einmal..


----------

