Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    serializzare oggetti in un campo blob di mysql inserimento con insert

    salve ho il seguente problema, vorrei serializzare un Vector[] in un campo blob di mysql 4 ...

    ho messo appunto il seguente codice :

    // per l'inserimento dei dati

    ByteArrayOutputStream temp_ByteArrayOutputStream = new ByteArrayOutputStream() ;
    ObjectOutputStream temp_ObjectOutput =new ObjectOutputStream(temp_ByteArrayOutputStream);
    temp_ObjectOutput.writeObject(vector_prodotti);
    temp_ObjectOutput.close()

    poi con una istruzione insert

    " INSERT INTO table... SET vector_prodotti = \""+temp_ByteArrayOutputStream+"\"

    // recupero dei dati

    Blob temp_blob = temp_resultset.getBlob("vector_prodotti");

    ObjectInputStream temp_ObjectInputStream = new ObjectInputStream(temp_blob.getBinaryStream());

    Vector temp_vector[] = (Vector[])temp_ObjectInputStream.readObject();


    a me sembra tutto ok ..l'inserinebto lo fa e a studiae il blob sembra anche che i dati ci siano
    il prob e che quando vado a rileggerli mi vieni un eccezione

    // messs

    java.io.InvalidClassException: java.util.Vector; local class incompatible: stream classdesc serialVersionUID = -2792375413090046207, local class serialVersionUID = -2767605614048989439

    se ben ho capito mi dice che la versione di vector letta da mysql non è compatibile co quella in uso il che è stranisimo visto che l'avevo serializata poco prima con lo stesso programma
    ide ????
    aiutoooooooooooooo :berto:
    fra la teoria e la pratica teoricamente non c'è differenza ma praticamente si

  2. #2
    mamma mia nessuno mi aiuta


    naturalmente se qualcuno vuole altri chiarimenti sul codice io sono quì a disposizione basta scrivere...



    aiutooooooooooooooooooooooooooooooooooooooooooooo
    fra la teoria e la pratica teoricamente non c'è differenza ma praticamente si

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Leggi al 4.6
    http://java.sun.com/j2se/1.5.0/docs/...pec/class.html

    e dintorni. Magari ti aiuta....
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    grazie andrea credo sia la strada giusta....
    anche se con l'inglese ci litigo un pò...


    scrivo anche perchè ho fatto delle prove ed ho scoperto che l'eccezione non viene lanciata quando si fa il cast...

    (Vector[])temp_ObjectInputStream.readObject();

    ma basta anche solamente leggere l'oggetto

    quindi anche l'istruzione

    temp_ObjectInputStream.readObject();

    lancia la stessa identica eccezione

    ho provato anche a serializzare una classe diversa ,(nella specifico un oggetto ArrayList)
    ma niente il risultato è lo stesso

    nelle guide che si trovano su internet si dice sempre di assegnare un valore a
    serialVersionUID quando si definisce una classe

    il problema che nel mio caso non l'ho costruita certo io la classe Vector
    e non gli posso assegnare nessun valore serialVersionUID

    inoltre non capisco come mai la stesa JVM assegni in condizioni diverse dei serialVersionUID
    diversi alla stesa classe , nel mio caso la classe Vector

    pobabilmente non ho capito i criteri con cui i JVM assegna i serialVersionUID alle classi java

    cmq sto concentrando la mia ricerca sulle seguenti classi

    1) UID
    2)ObjectStreamClass
    che ha il metodo
    getSerialVersionUID
    purtroppo non ha anche il
    setSerialVersionUID

    3)
    java.lang.Object
    extended byjavassist.SerialVersionUID
    unica classe che ha un metodo

    setSerialVersionUID

    (voglio vedere se riesco a forzare l' uid in qualche modo anche se certo non sarebbe una soluzione ottimale)

    se faccio passi in avanti posterò al più presto

    fra la teoria e la pratica teoricamente non c'è differenza ma praticamente si

  5. #5
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    non mi sono mai imbattuto in un problema di questo tipo, ma comunque: hai provato a creare una tua classe che ha come proprieta' un Vector[] e a serializzare quella?
    una cosa tipo:
    codice:
    public class Pippo implements Serializable {
        private static final long serialVersionUID = 7526472295622776147L;
        
        private Vector[] array;
    
        public Vector[] getArray() {
            return this.array;
        }
    
        public void setArray(Vector[] array) {
            this.array = array;
        }
    }
    istanzi un oggetto della classe Pippo, setti il tuo Vector[] come proprieta' dell'oggetto appena istanziato (con setArray()), salvi nel db, recuperi dal db e provi a tirare fuori il tuo Vector[] con il metodo getArray().

    Tanto per vedere se il problema si risolve oppure bisogna pensare ad altre questioni...

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da nether
    non mi sono mai imbattuto in un problema di questo tipo, ma comunque: hai provato a creare una tua classe che ha come proprieta' un Vector[] e a serializzare quella?
    una cosa tipo:
    codice:
    public class Pippo implements Serializable {
        private static final long serialVersionUID = 7526472295622776147L;
        
        private Vector[] array;
    
        public Vector[] getArray() {
            return this.array;
        }
    
        public void setArray(Vector[] array) {
            this.array = array;
        }
    }
    istanzi un oggetto della classe Pippo, setti il tuo Vector[] come proprieta' dell'oggetto appena istanziato (con setArray()), salvi nel db, recuperi dal db e provi a tirare fuori il tuo Vector[] con il metodo getArray().

    Tanto per vedere se il problema si risolve oppure bisogna pensare ad altre questioni...
    Ecco appunto, stavo per suggerire la stessa cosa Ti conviene creare una tua classe di cui avrai pieno controllo. Il Vector potrà quindi essere un "campo" di tale classe.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    stò provando ,anche se nutro poche speranze ...
    fra poco posto il risultato
    fra la teoria e la pratica teoricamente non c'è differenza ma praticamente si

  8. #8
    niente da fare

    java.io.InvalidClassException: java.util.Vector; local class incompatible: stream classdesc serialVersionUID = -2792375413090046207, local class serialVersionUID = -2767605614048989439
    at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
    at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
    at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unkno wn Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readArray(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.defaultReadFields(Unknow n Source)
    at java.io.ObjectInputStream.readSerialData(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unkno wn Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at dialog_gest_prodotto.<init>(dialog_gest_prodotto.j ava:190)
    at scheda_gestione$2.actionPerformed(scheda_gestione. java:146)
    at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)



    si vede che java controlla tutti gli UID degli oggetti contenuti in una classe
    oltre a quello della classe stessa naturalmente
    fra la teoria e la pratica teoricamente non c'è differenza ma praticamente si

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ti posto un esempio banale (ma che qui funziona)
    codice:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.*;
    import java.io.*;
    
    public class blobHandling {
    
      private String db_host;
      private String db_name;
      private String db_user;
      private String db_password;
    
      public blobHandling(String db_host, String db_name, String db_user, String db_password) {
        this.db_host = db_host;
        this.db_name = db_name;
        this.db_user = db_user;
        this.db_password = db_password;
    
        try {
          try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
          }
          catch (Exception e) {
            System.out.println(e.toString());
          }
    
          Connection conn = DriverManager.getConnection("jdbc:mysql://" + db_host +
              "/" + db_name + "?user=" + db_user + "&password=" + db_password);
          
          serializableClass sc = new serializableClass();
          ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
          ObjectOutputStream oos = new ObjectOutputStream(baos);
          oos.writeObject(sc);
          
          byte[] objectByte = baos.toByteArray();
          baos.close();
          oos.close();
          
          ByteArrayInputStream bais = new ByteArrayInputStream(objectByte);
          
          PreparedStatement pstmt = conn.prepareStatement("INSERT INTO serialized (value) VALUES (?)");
          pstmt.setBinaryStream(1, bais, objectByte.length);
    
          //PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM IMAGES WHERE ID=1");
          if (pstmt.executeUpdate() != 1) {
            throw new RuntimeException();
          }
          
          // recupero l'oggetto dal Database
          pstmt = conn.prepareStatement("SELECT value FROM serialized WHERE id = ?");
          pstmt.setInt(1,1);
          ResultSet rs = pstmt.executeQuery();
          if (rs.next()) {
            objectByte = rs.getBytes("value");
            bais = new ByteArrayInputStream(objectByte);
            ObjectInputStream ois = new ObjectInputStream(bais);
            serializableClass readSC = (serializableClass)ois.readObject();
            System.out.println(readSC);        
          }
    
        }
        catch (SQLException ex) {
          System.out.println("SQLException: " + ex.getMessage());
          System.out.println("SQLState: " + ex.getSQLState());
          System.out.println("VendorError: " + ex.getErrorCode());
        }
        catch (Exception e) {
          System.out.println(e.toString());
        }
      }
    
      public static void main (String[] args) {
        blobHandling bH = new blobHandling("localhost", "java", "user", "password");
      }
    }
    codice:
    import java.util.*;
    import java.io.*;
    
    public class serializableClass implements Serializable {
    
      private Vector[] v;
      
      static final long serialVersionUID = -5947843555384378582L;
      
      public String toString() {
        String temp = "";
        for (int i = 0; i < v.length; i++) {
          for (int j = 0; j < v[i].size(); j++) {
            temp += ((String)v[i].elementAt(j))+" -- ";
          }
          temp += "\n";
        }
        return temp;
      }
    
      public serializableClass() {
        v = new Vector[2];
        v[0] = new Vector();
        v[1] = new Vector();
        String[] s1 = {"Paperino", "Qui Quo Qua", "Minnie", "Pippo", "Pluto"};
        String[] s2 = {"Walt Disney", "Hannah & Barbera"};
        for (int i = 0; i < s1.length; i++) {
          v[0].add(s1[i]);
        }
        for (int i = 0; i < s2.length; i++) {
          v[1].add(s2[i]);
        }
      }
      
      public static void main (String[] args) {
        System.out.println("Test Class");
        serializableClass sc = new serializableClass();
      }
    }
    In cui lo UID che ho messo è quello che mi usciva dall'errore nello stream. Non so se è onesta come cosa, però così funziona.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    grazie mille per l'esempio non è affatto banale......
    soprattutto perchè funziona... VVoVe:

    fammi capire una cosa quando dici ...

    In cui lo UID che ho messo è quello che mi usciva dall'errore nello stream. Non so se è onesta come cosa, però così funziona
    vuol dire che le prime volte ti dava lo stesso errore ???

    e che hai risolto assegnando alla classe involuclo uno dei 2 UID che riporta l'errore ??

    io ho provato ad assegnare tutti e due gli UID che riporta l'errore ma non va.....

    lavorerò ancora sul codice , magari avvicinandolo all' esempio che hai fatto....

    farò sapere al più presto



    fra la teoria e la pratica teoricamente non c'è differenza ma praticamente si

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.