[JAVA/DB file-based] Implementazione di un'applicazione che utilizza un DB.

LacioDrom

Nuovo Utente
13 Feb 2008
14
4
0
37
Sardegna
Come da titolo, vorrei fare un programmino semplicissimo che utilizza un database file-based (il database è presente su un file che può essere copiato e scarrozzato ovunque).

Detto questo ho un problema serio di implementazione dovuto alle mie scarse esperienze nella programmazione JAVA-DB {con PHP/MySQL risolverei in 30minuti}.

Ho un database con una semplice tabella contenente degli acquisti (per ora) e devo richiamare le informazioni sul programma, ma come faccio?

IPOTESI 1: Creare una classe 'acquisto' avente come variabili private i campi della tabella e i relativi metodi setVariabile()/getVariabile() per poterle modificare. Poi per caricare il database dovrei creare tante istanze { new Acquisto() } quante sono le righe della tabella?

IPOTESI 2: Anche con JAVA è possibile leggere e scrivere sul database 'seduta stante', quindi basterebbero delle funzioni statiche e dei link agli ID {stile Browser} ?

Putroppo non ho mai visto del codice di un programma che utilizzasse un DB quindi non so proprio come fare..
Non ho ancora scritto nemmeno una riga di codice perchè prima voglio farmi uno schema di quello che andrò a fare (visto che dovrò preparare anche l'interfaccia).
Poi se qualcuno conosce un programmino opensource che fa più o meno la stessa cosa mi piacerebbe esaminarlo, il miglior modo è sempre quello.. :help:
 
  • Like
Reactions: ottofonsuppost

lotus

Utente Attivo
5 Mag 2009
543
8
0
Ciao!

Io credo che l'approccio più giusto sia il primo.

Nello specifico puoi estrarre una riga per volta dal file e tramite StringTokenizer costruirti in pochi passi l'oggetto (magari facendo opportunamente le verifiche del caso).

Successivamente puoi trattare gli oggetti creati inserendoli all'interno di una Collection in modo da facilitare la loro gestione.
Anche l'update, in tal senso, puòà risultare ancora più semplice poichè per impedire di accedere continuativamente al file system in scrittuta puoi "svuotare" il contenuto della collection nel file ed ottenere così la versione aggiornata.
Questo approccio ti consente:
1. La lettura da file la fai solo all'inizio (va tutto nella collection).
2. La scrittura viene fatta solo alla fine (nel file)
Puoi gestire tramite la classe e le collection i crtieri di ordinamento, comparazione e ricerca senza operare sui file e perderne in prestazioni.

Per prodotti già realizzati puoi provare a fare una ricerca ma credo che ti conviene farlo ad-hoc. Tra l'altro ti assicuro che ci vuole pochissimo.

Spero di riuscire a realizzare a breve un piccolo estratto.

Mi auguro di essere stato utile.
Ciro
 
  • Like
Reactions: ottofonsuppost

LacioDrom

Nuovo Utente
13 Feb 2008
14
4
0
37
Sardegna
Per prodotti già realizzati puoi provare a fare una ricerca ma credo che ti conviene farlo ad-hoc. Tra l'altro ti assicuro che ci vuole pochissimo.

Spero di riuscire a realizzare a breve un piccolo estratto.

Mi auguro di essere stato utile.

Certo, grazie! Mi informerò sulle collection il prima possibile.
Per il fatto dei prodotti già realizzati mi interesserebbero se fossero open source, in modo da vedere il codice e imparare qualcosa. Sto preparando l'esame di JAVA e quindi, siccome mi servirebbe un software del genere, vorrei unire l'utile al dilettevole :D..

Per la cronaca, siccome ho bisogno di un database file-based, mi è stato consigliato H2 associato alle JPA. Per ora sto smanettando con H2 guardando i codici di samples per capire qualcosa. Se qualcuno avesse del materiale o qualche link di tutorial utile ben venga...
 

LacioDrom

Nuovo Utente
13 Feb 2008
14
4
0
37
Sardegna
ciao un po di tempo fa scrissi un piccolo how-to

lo trovi qui http://adsl.altervista.org/howTo/JDBC.php

forse ti puo aiutare. fammi sapere se ti è stato utile

Sto usando H2 in quanto ho bisogno di un database file-based che risieda in una cartella 'trasportabile' da un pc a un altro, ma ho visto che la connessione viene fatta con JDBC:

Codice:
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:data/test", "sa", "");

Di conseguenza conoscere JDBC mi sarà utile sicuramente, oltre a conoscere le librerie H2.
Ho una domanda: mi è stato consigliato di utilizzare, insieme ad H2, anche le JPA (Java Persistence API), ma sinceramente credo di poter fare le stesse cose solamente con H2. Mi sbaglio? Oppure le JPA accelerano le cose?
 
  • Like
Reactions: ottofonsuppost

LacioDrom

Nuovo Utente
13 Feb 2008
14
4
0
37
Sardegna
Ciao!

Io credo che l'approccio più giusto sia il primo.

Successivamente puoi trattare gli oggetti creati inserendoli all'interno di una Collection in modo da facilitare la loro gestione.
Anche l'update, in tal senso, puòà risultare ancora più semplice poichè per impedire di accedere continuativamente al file system in scrittuta puoi "svuotare" il contenuto della collection nel file ed ottenere così la versione aggiornata.
Questo approccio ti consente:
1. La lettura da file la fai solo all'inizio (va tutto nella collection).
2. La scrittura viene fatta solo alla fine (nel file)
Puoi gestire tramite la classe e le collection i crtieri di ordinamento, comparazione e ricerca senza operare sui file e perderne in prestazioni.

Per prodotti già realizzati puoi provare a fare una ricerca ma credo che ti conviene farlo ad-hoc. Tra l'altro ti assicuro che ci vuole pochissimo.

Spero di riuscire a realizzare a breve un piccolo estratto.

Mi auguro di essere stato utile.
Ciro

Attraverso le JPA e JPQL posso realizzare query che restituiscono direttamente oggetti e utilizzare l'approccio che mi hai consigliato delle collection.
Però ho un paio di domande:
Utilizzando le JPA ottengo tanti tipi di oggetti quante sono le tabelle (tabella Persona -> class Persona), quindi come mi regolo con le collection? Una collection per ogni tabella?
Poi come gestisco le relazioni tra più tabelle? Se per esempio vorrei fare una JOIN query con clausola where non potrei usare SQL ma utilizzare costrutti if tra i campi degli oggetti, giusto?
 
  • Like
Reactions: ottofonsuppost

lotus

Utente Attivo
5 Mag 2009
543
8
0
Ciao,

in realtà la risposta dipende dal contesto nel problema :)

cercherò, per quanto possibile di essere chiaro ed esaustivo.

Nella collection, solitamente conviene gestire tipi di dati omogenei per cui avrai una Collection di Persone, etc.. in sostanza una collection per ciascun entità del dominio applicativo.

Per quello che riguarda le join, invece, dipende dal numero di join che devi effettuare e la mole di dati. Spesso è utile utilizzare una classe di appoggio che ha tanti riferiemtni tante quante sono le table indicate nella clausola from del join. Dettagliando: Se faccio un join tra persona e skill potrei creare una classe Employee con due riferimenti, uno alla classe Persona ed uno alla classe Employee.
Il join, quindi, ti scaturisce dalle variabili di istanza della classe associativa.

L'approccio suddetto ti consente, inoltre, di estrapolare solo i campi che ti interessano senza introdurre overhead. Infatti:
Nelle varie Collection hai la lista degli elementi, se devi fare una join fra persona p e skill s, cerchi sulla collection persone quella con pk di interesse, ottieni l'oggetto e fai lo stesso con skill. Crei l'oggetto associativo con le opportune variabili di istanza ed hai concluso...

La classe associativa, infatti, conterrài riferimenti ai due oggetti, potrà estrapolare agilmente i singoli dati (sempre senza agire su file) e potrai scrivere metodi ad-hoc che consentano di visualizzare solo i campi richiesti. Per lo più, sempre utilizzando le collection potrai gestire queste tabelle associative in modo molto funzionale introducendo criteri di ordinamento e comparazione...

Spero di esserti stato d'aiuto...

Sono a disposizione
Ciro
 
  • Like
Reactions: ottofonsuppost
Discussioni simili
Autore Titolo Forum Risposte Data
J File audio in java Java 0
N [Java]problema jasper report dopo compilazione file .jar Java 0
O [Java] Lettura da JSON File Java 0
A Java: Scrivere su un file senza sovrascriverlo Java 1
T java-problema con i file wav Java 0
A [Java] J2ME(NetBeans) lettura dati file txt Java 5
M [Java] Cercare una stringa in un file di testo Java 1
M JSP - JAVA : Scrittura su file.xml come fare? Help! Java 1
L [Java] Salvataggio File Di Testo Java 1
F informazioni del file in Java Java 5
M java lettura scrittura file con j2me Java 0
L java api_google Javascript 0
F NetBeans problema creazione progetto Java Windows e Software 0
Z [java] bufferizzare stream audio da mic Java 1
L java + Api di google Javascript 1
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0
Drago73 [Java] leggere/scrivere txt server Java 0
M [Javascript] Java card Java 0
serena.cerutti posizioni aperte: PhP, Java, .Net Offerte e Richieste di Lavoro e/o Collaborazione 0
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0
N [Java] jbutton con funzioni Java 2
M [java] esercizio lunghezza array di stringhe Java 0
A [java] problema esercizio Java 0
filograndipad2 Esempi chiari e completi sul funzionamento degli eventi in Java Java 1
Raziel84 [Java] Combinazione elementi matrice Java 0
A [java] problema esercizio array Java 5

Discussioni simili