Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Problema ResultSet e Stringhe

    Ciao, ho il seguente problema:
    Faccio una query Sql in Java tramite driver jdbc, e salvo la query in un ResultSet. Fin qui funziona tutto bene. Ora ho la mia bella istanza ResultSet e la itero per estrarmi tutti i valori di una colonna di tipo VARCHAR. Uso la funzione getString("label") di ResultSet, e funziona fino a che non incontra una Stringa che contiene caratteri particolari(per esempio nomi tedeschi con lettere con due puntini sopra), e solleva un'eccezione di tipo:
    codice:
    com.ibm.db2.jcc.b.SqlException: Input length = 27253 at com.ibm.db2.jcc.b.eb.a(eb.java:1612) at 
    com.ibm.db2.jcc.b.eb.n(eb.java:451) at 
    com.ibm.db2.jcc.b.eb.H(eb.java:1155) at 
    com.ibm.db2.jcc.b.yg.getString(yg.java:870) at com.ibm.customer.analysis.ReportDao.createEntsDaoList(ReportDao.java:137) at
    com.ibm.customer.analysis.ReportDao.execute(ReportDao.java:62) at 
    com.ibm.customer.analysis.ReportDao.main(ReportDao.java:287) 
    Caused by: java.nio.charset.MalformedInputException: Input length = 27253 at
    com.ibm.db2.jcc.b.t.a(t.java:19) at com.ibm.db2.jcc.b.eb.a(eb.java:1608) 
    ... 6 more 
    Caused by: sun.io.MalformedInputException at sun.io.ByteToCharUTF8.convert(Unknown Source) at 
    com.ibm.db2.jcc.b.t.a(t.java:16) 
    ... 7 more
    Non ne esco.....

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Dai un occhio a questa classe

    http://download.oracle.com/javase/7/...etDecoder.html

    Il problema risiede nella codifica; utilizza ASCII suppongo, che non è compatibile chiaramente con i tuoi caratteri.

  3. #3
    Un piccolo esempio su come usarla?
    (il problema è che l'eccezione è sollevata appena faccio getString, quindi non posso lavorare sulla stringa per convertirla...)
    Grazie intatnto per la risposta velocissima!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Nel DB come li vedi i caratteri?
    Perchè con String teoricamente non dovrebbero esserci problemi... Prova a stampare (se hai una GUI in un area di testo), oppure su un file quello che leggi... Se il problema è proprio la chiamata penso si debba settare qualcosa. Però non ne ho mai avuto bisogno, quindi non saprei come muovermi...

  5. #5
    Prova a fare il getByte e poi formattarlo nel charset giusto tipo US-ASCII o UTF-8 o ISO-8859-1 etc.
    ES:
    codice:
    String s = new String(resultset.getBytes("NOMECAMPO"),"il tuo charset");

  6. #6
    Si si, sono caratteri! Per esempio " ä ", la a con due puntini sopra. Se faccio getString su un testo con caratteri 'normali' infatti non ci sono problemi!! Inoltre ho provato a usare tutti i metodi di ResultSet, per esempio getByte() per estrarre il dato come array di byte e poi trasformarlo in string ma ottengo sempre la stessa eccezione...... uff..

  7. #7
    Originariamente inviato da snakeplinsky
    Prova a fare il getByte e poi formattarlo nel charset giusto tipo US-ASCII o UTF-8 o ISO-8859-1 etc.
    ES:
    codice:
    String s = new String(resultset.getBytes("NOMECAMPO"),"il tuo charset");
    Si c'avevo pensato, ma viene sollevata l'eccezione:

    "com.ibm.db2.jcc.am.SqlSyntaxErrorException"
    "Conversione dati non valida: tipo di colonna dei risultati non corretto per la conversione richiesta."

    quando chiamo resultSet.getBytes ...... (in pratica non posso chiamare getBytes su variabili VARCHAR) .....

    ...forse sto cercando di fare una cosa impossibile

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.