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

    Problema con query

    Salve a tutti,
    è da un pò che combatto con questo erroraccio:

    java.sql.SQLException: [Microsoft][Driver Manager ODBC] Lunghezza della stringa o del buffer non valida
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unkn own Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    at ConnessioneDB.eseguiQuery(ConnessioneDB.java:73)
    at Autodial.<init>(Autodial.java:185)

    Generato dalla seguente query:
    codice:
    String queryTot="SELECT * FROM csv;";	
    Vector v= new Vector();
    v=conn.eseguiQuery(queryTot);
    La riga che genera errore è questa:
    String ragSoc=rs.getString("rag_soc");

    Che si trova nella seguente funzione:
    codice:
       public Vector eseguiQuery(String query) {
          Vector v = null;
          String [] record;
          int colonne = 0;
          try {
             Statement stmt = db.createStatement();     
             ResultSet rs = stmt.executeQuery(query);   
    
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
    
             while(rs.next()) { 
            	 String id=rs.getString("ID");
            	 String ragSoc=rs.getString("rag_soc");
            	 String num=rs.getString("num");
            	 v.add(id + ";" + ragSoc + ";" +num);
             }
    
             rs.close();  
             stmt.close();  
          } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
          
          return v;
       }
    Qualcuno sa spiegarmi qual'è il problema?
    Ho già provato parecchie delle soluzione trovate sul web senza successo...
    Help!

    Grazie in anticipo
    Raffaele

  2. #2
    Up! La situzione si fa critica!
    Raffaele

  3. #3
    guarda nn vorrei dire delle cavolate....

    allora hai unta tabella del db che ha questi 3 campi allora credo che tu abbia messo rag_soc di tipo text o altro tipi nel db. quindi hai una stringa molto lunga e la variabile nn riesce a contenerla visto che una stringa in java puo contenere massimo 255 caratteri. se il problema è questo le possibilità per risolverlo sono 2 o cambi il db e metti rag_soc varchar(255) oppure ti crei una variabile che contiene molto di + di 255 char.

    altrimenti se non sta in questo il problema allora segui questa procedura
    stampa id con una System.out.Println(id);
    prima di prelevare dal db rag_soc, ed esegui il metodo.
    se stampa id siamo sicuri che si tratta solo di un problema su quella colona rag_Soc. altrimenti è un errore di connessione al db.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da provyme
    codice:
    String queryTot="SELECT * FROM csv;";
    La query l'hai provata con SQuirreL o programmi simili, al di fuori del tuo codce? Funziona?
    (comunque il ; in genere non va indicato ma non penso sia questo il problema.)

    Originariamente inviato da provyme
    La riga che genera errore è questa:
    String ragSoc=rs.getString("rag_soc");
    Sicuro che rag_soc sia di un tipo convertibile in String?

    Originariamente inviato da orphenix
    una stringa in java puo contenere massimo 255 caratteri
    No.
    Visto che il metodo length() restituisce interi (int) e che l'int più grande rappresentabile da Java è Integer.MAX_VALUE (che vale 2^31-1), direi che un oggetto String più di 2^31-1 caratteri non possa contenerne
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io ti chiederei 2 cose:
    1. come hai definito nel database il campo ragione sociale?
    2. come ti diceva anche Alex, prova a fare la query con SQuirreL, dbvisualizer o altro e vedi che risultati hai. Alle brutte puoi fare un accesso al db da command line e vedere quello che restituisce la stessa query. Se hai un result allora il problema è la stringa, come ti facevano notare, altrimenti è altrove.
    RTFM Read That F*** Manual!!!

  6. #6
    Dunque... Il database è un one-file creato con Access...ho provato a fare le query direttamente su access e tutto fila liscio come l'olio...

    Facendo delle prove ho notato che se faccio:
    codice:
    SELECT TOP 544 * FROM csv
    Non da alcun tipo di errore, mentre da:
    codice:
    SELECT TOP 545 * FROM csv
    in poi lo genera...

    Da notare che il db(di prova) che sto usando al momento è stato creato in questo modo:

    codice:
    ---------------------------------------- 
    ID           rag_soc          num            
              (VARCHAR 255)   (VARCHAR 20)   
    ---------------------------------------- 
    1             ufficio       0123456789 
    2             ufficio1      0123456789 
    3             ufficio2      0123456789 
    4             ufficio3      0123456789 
    ....           ....            .... 
    ....           ....            .... 
    9999        ufficio9998     0123456789 
    ----------------------------------------
    cosa ancor più strana, stampando l'output come suggeriva orphenix, con entrambe le query l'errore viene generato a questo punto:

    .......
    .......
    ID: 268
    rag_soc: ufficio267
    num: 0123456789
    ID: 269
    java.sql.SQLException: [Microsoft][Driver Manager ODBC] Lunghezza della stringa o del buffer non valida................

    Qualche suggerimento..?
    Raffaele

  7. #7
    Ragazzi al momento ho risolto utilizzando JavaDB. Il problema infatti pare sia solo di Access, su JavaDB va tutto a gonfie vele.
    Ciò non vuol dire però che non proverò a continuare a risolvere questo problema... Se troverò una soluzione la posterò qui. Alla prossima(anche se spero non ci sia ) e grazie di tutto!
    Raffaele

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi sovviene una domanda, perché usi access come database? cioè se non hai motivi particolari, perché usare quelli che danno più problemi? Mi aspetto l'uso di mysql se sei tu a decidere come fare
    RTFM Read That F*** Manual!!!

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.