# SELECT longtext -> als String behandeln



## Mirakulix (27. Mrz 2009)

Hallo Java-Gemeinde,

ich selektiere ein Longtext-Feld und muss es anschließend als String in ein Template übergeben. Ich habe gelesen das ich Longtext mittels getAsciiStream als InputStream auslesen muss. Das habe ich soeweit. Aber die Weiterverarbeitung zu einem String funzt einfach nicht. Ich wäre dankbar wenn jemand von Euch mal drüberkucken könnte.

[HIGHLIGHT="Java"]String sql5 = "SELECT TITEL, TEXT AS EXTRATEXT FROM TABELLE WHERE ID = 1"

ResultSet resultSet5 = statement5.executeQuery(sql5);

if (resultSet5.next())
{
  extratitel              =    (resultSet5.getString("TITEL"));
  extratext             =     (resultSet5.getAsciiStream("TEXT"));  
}[/HIGHLIGHT]

Liebe Grüße 

Ronja


----------



## Ebenius (27. Mrz 2009)

Es sollte, statt mit getAsciiStream(...), auch mit getCharacterStream(...) funktionieren. Damit bekommt man dann ein Reader-Objekt, welches man in einen StringBuilder einlesen kann, um dann einen String daraus zu machen. Das sollte beispielsweise in etwa so funktionieren (ungetestet; Code im Browser getippt): [Highlight=Java]Reader r = resultSet5.getCharacterStream("EXTRATEXT");
// use a buffered reader -- optional!
if (!(r instanceof BufferedReader)) {
  r = new BufferedReader(r);
}

final StringBuilder sb = new StringBuilder();
final CharBuffer cb = CharBuffer.allocate(1024);
while (r.read(cb) != -1) {
  cb.flip();
  sb.append(cb, cb.position(), cb.limit());
}
final String result = sb.toString();[/Highlight]


----------



## Mirakulix (27. Mrz 2009)

Hallo Ebenius,

lieben Dank für Dein Feedback. Als Resultat bekomme ich folgende Fehlermeldung:


```
cannot find symbol
symbol  : class CharBuffer
location: class VK3
                                final CharBuffer cb = [B]C[/B]harBuffer.allocate(1024);
                                      

cannot find symbol
symbol  : variable CharBuffer
location: class VK3
                                final CharBuffer cb = CharBuffer.allocate(1024);
```

Also in Zeile 8 Deiner Idee. Hast Du einen Tipp für mich?

Liebe Grüße

Ronja


----------



## Ebenius (27. Mrz 2009)

Wäre doch eine gute Idee, die Klasse CharBuffer auch zu importieren. Bist Du eine Java-Anfängerin?

[Highlight=Java]import java.nio.CharBuffer;[/Highlight]
Ebenius


----------



## Mirakulix (27. Mrz 2009)

Hallo Ebenius,

doof - hätte ich auch sehen können. 

Ja, mich kann man sicherlich noch Anfängerin nennen. Klappt eigentlich immer besser und ich gebe mein Bestes. Aber momentan stoße ich bei SQL-Anweisungen von LongColumns an meine Grenzen. Tut mir echt leid wenn ich Dich damit nerve 

Jetzt erhalte ich noch folgende Meldung:

unreported exception java.io.IOException; must be caught or declared to be thrown

while (extratext.read(*cb*) != -1)

Wobei ich doch anhand Deines Codes:

final CharBuffer cb         = CharBuffer.allocate(1024);

die Variable cb zuvor deklariert habe, oder nicht?

Liebe Grüße und vorab ein schönes Wochenende!

Ronja


----------



## Ebenius (27. Mrz 2009)

Du nervst natürlich nicht. Es ist nur immer gut zu wissen, wie weit man ausholen muss. 

Lies Dir den Text des Compiler-Fehlers nochmal durch. Da steht: 





> unreported exception java.io.IOException; must be caught or declared to be thrown


Der Compiler kennt "cb", schimpft aber, dass die Methode Reader.read(...) eine Exception werfen will die Du nicht handhabst. Also muss in Deinen Code ein entsprechendes try-catch-Konstrukt, welches die von read(...) ggf. geworfene IOException handhabt, oder die Methode in der das read(...) aufgerufen wird muss erlauben, dass IOException geworfen wird (dann muss die Methode die diese aufruft sich wiederum um die IOException kümmern, usw.). Welche der beiden Varianten Du nutzt hängt vom Kontext ab; kann ich also schlecht sagen.

Ausreichende Englischkenntnisse vorausgesetzt hilft Dir ggf. das Sun Java Tutorial » Lesson: Exceptions.

Ebenius


----------



## Mirakulix (27. Mrz 2009)

Hallo Ebenius,

vielen lieben Dank! Das hat nun bestens funktioniert! Einfach einen try/catch um Deinen Code und schon hat es funktionier!!!

Danke!!!

Ronja


----------

