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

    [Java] Consiglio su gestione dati da DB

    Salve a tutti, vi scrivo perchè ho bisogno di un consiglio.
    Volevo un consiglio su come gestire i dati letti da una tabella di un database; per la precisione è un database di M.Office, letto dal codice Java in locale sul pc; ...sto cercando di realizzare una "lettura" dinamica dei dati, senza sapere a priori il contenuto, come numero di colonne, nomi colonne etc, perchè in futuro vorrei dare all'applicazione la possibilità di creare e gestire tabelle nel database in maniera "dinamica" appunto.
    Vi posto per meglio descrivervi il tutto, alcune parti del codice....
    Questo è il codice che da una classe generica richiama la classe e il metodo di lettura del database e aspetta il return dei dati:
    codice:
    ConnessioneDatabase istCallDati = new ConnessioneDatabase();
    ArrayList<?> datiStazione = istCallDati.InterrogazioneDatabase("archivioDB","Personale");
    Di seguito parte del codice con cui "compatto" nella classe ConnessioneDatabase e il metodo InterrogazioneDatabase i dati da affidare al return per restituirli alla Classe chiamante:
    codice:
    //RICAVO LE COLONNE
    ResultSetMetaData metadata = datiChiamata.getMetaData();
    int numeroColonne = metadata.getColumnCount();
    datiPassati.add(numeroColonne.toString()); //PRIMO ELEMENTO = numeroColonne QUA MI DA ERRORE!!!
    while(datiChiamata.next()) {
        for (int i=0; i<numeroColonne; i++) {
            datiPassati.add(metadata.getColumnName(i+1)+"|"+datiChiamata.getString(i+1));
        }
    }
    
    return datiPassati;
    Il return mi restuisce un ArrayList come in esempio:
    codice:
     [ 3, ID|0, nome|Pippo, età|38, ID|1, nome|Mario, età|45, ID|2, nome|Giulio, età|29 ]
    dove l'indice [0] dell'ArrayList mi serve per capire quante colonne ho e poi splittare in tanti Array quanti sono le righe, cosi da avere:
    codice:
    ArrayUno[0]= ID|0
    ArrayUno[1]= nome|Pippo
    ArrayUno[2]= età|38
    
    ArrayDue[0]= ID|1
    ArrayDue[1]= nome|Mario
    ArrayDue[2]= età|45
    
    ArrayTre[0]= ID|2
    ArrayTre[1]= nome|Giulio
    ArrayTre[2]= età|29
    Capisco che come metodo di gestione dei dati è molto scomodo, volevo provare con Object,
    ma non capisco come gestirlo!! Vi chiedo quale secondo voi è il metodo migliore, così lo approfondisco e studio, Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi sovviene una domanda:vuoi creare un gestore di database? Perché anche in quel caso hai una certa organizzazione ad oggetti, cosa che dal tuo codice non si evince molto.
    Ad esempio avrai una classe Tabella che indica la tabella che stai creando, info base più un elenco di campi...
    Il campo è a sua volta una classe....scrivo a braccio, ma questo dal tuo codice non si evince
    RTFM Read That F*** Manual!!!

  3. #3
    Quello che chiedo è appunto un consiglio sul metodo migliore per gestire, in maniera dinamica, i dati letti e da scrivere in un database. Nel codice uso un ArrayList che comunque ho cambiato in stringa con separatori "|" e "#".
    Pensavo di usare Object e di studiarmi per bene del materiale su questi.

  4. #4
    Potresti usare le arraylist come contenitore di record e usare le tuple per contenere i dati di ogni singolo record.
    Cos'hai pensato di fare per il versioning del database?
    ...

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Hai dato un' occhiata alle classi di java.sql?

  6. #6
    Originariamente inviato da Caiodark
    Potresti usare le arraylist come contenitore di record e usare le tuple per contenere i dati di ogni singolo record.
    Cos'hai pensato di fare per il versioning del database?
    Devo studiarmi truple e non so cosa sia il versioning del database!!
    Hai qualche breve esempio!?

  7. #7
    Originariamente inviato da Who am I
    Hai dato un' occhiata alle classi di java.sql?
    Grazie del suggerimento.... proverò a capirci qualcosa e capire quale sia iòl metodo migliore e come funziona.

  8. #8
    Originariamente inviato da Wolvy23
    Devo studiarmi truple e non so cosa sia il versioning del database!!
    Hai qualche breve esempio!?
    Ho letto bene cosa vorresti fare e penso che tu stia cercando di reinventare la ruota, quello che vuoi esiste già ed è il recordset, perché sudare per creare una cosa identica?
    Tieni il recordset come struttura dati per la tua applicazione e interroga i suoi metadati per ispezionare i risultati ottenuti dal db.
    Se la cosa ti risulta un po' macchinosa sappi che usando il solo polimorfismo per ereditarietà questo è massimo che si può ottenere, per quanto tu ti possa scervellare non ci sarà una classe che ti permetta di semplificare le cose. Anche il RecordSet usa object per contenere il dato, pertanto o tu conosci l'esatto elenco dei campi restituiti e il loro tipo per usare il getter e il setter giusto o interroghi i metadati.

    L'alternativa è usare la programmazione generica:
    codice:
    // Definisci i tuoi tipi dati, oppure usa i tipi dati forniti in java.sql.Types
    public enum TipoDato{
      STRINGA,
      NUMERICO,
      ...
    }
    
    public class Dato<X>{
      String nome;
      TipoDato tipo;
      X valore;
      ... getter e setter vari
      public X getValore(){
        return valore;
      }
    }
    
    // 
    public class Record {
      private List<Dato<?>> valori;
      public <X> X getDato(int indice, Class<X> tipo){
        try{
          return tipo.cast(valore.get(indice));
        catch Exception(e){
          return null;
        }
      }
    }
    ...

  9. #9
    Grazie dei chiarimenti Ciaodark....
    Pensavo di fare una cosa del genere.... una Classe con due metodi, uno per la scrittura e l'altro per la lettura del database; quello della lettura invia il ResultSet ad una Classe dedicata a quella tabella interrogata, Classe che provvede a creeare dati pubblici, leggibili da altre Classi, in modo che il ResultSet può essere "impiegato" per la lettura di altre tabelle.
    Mi chiedevo se il return può restituire un intero ResultSet o questo può essere inviato per intero ad un'altra Classe!!! Farò degli studi e prove, poi ti posterò i risultati.
    Sono incuriosito anche dall'esempio che mi hai scritto, quella della programmazione generica, ereditarietà e polimorfismo sono alcuni tra gli aspetti di Java che ancora non riesco assimilare.

    Grazie, a presto

  10. #10
    Originariamente inviato da Wolvy23
    Grazie dei chiarimenti Ciaodark....
    Pensavo di fare una cosa del genere.... una Classe con due metodi, uno per la scrittura e l'altro per la lettura del database; quello della lettura invia il ResultSet ad una Classe dedicata a quella tabella interrogata, Classe che provvede a creeare dati pubblici, leggibili da altre Classi, in modo che il ResultSet può essere "impiegato" per la lettura di altre tabelle.
    Mi chiedevo se il return può restituire un intero ResultSet o questo può essere inviato per intero ad un'altra Classe!!! Farò degli studi e prove, poi ti posterò i risultati.
    Sono incuriosito anche dall'esempio che mi hai scritto, quella della programmazione generica, ereditarietà e polimorfismo sono alcuni tra gli aspetti di Java che ancora non riesco assimilare.

    Grazie, a presto
    Anche questo esiste già, guarda cosa fa Hibernate.
    ...

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.