PDA

Visualizza la versione completa : [JAVA] Creare una tabella leggendo un file .txt


newtel
01-01-2006, 21:25
Ciao a tutti e...buon 2006!!
Ho un piccolo problema...
dovrei creare una piccola procedura che:
1) legga un file di testo e crei una tabella in mysql.

l' ho visto fare con MSSQL ma...non riesco a ricordare come...ufffff...che fastidiooo!

qualcuno per cortesia può aiutarmi???

Andrea1979
01-01-2006, 21:45
Dov'è che ti blocchi?

Prima cosa: dividi et impera.

- Occupati di leggere il file in questione e di ottenerne i dati (StringTokenizer, Vector, BufferedFileReader sono le cose che ti serviranno).

- Il file contiene solo i dati da inserire nella tabella, oppure le informazioni per la creazione della tabella sono contenute nel file stesso?

- Leggi la pillola di LeleFT sulla comunicazione tra Java e Database

PS: se postavi qualcosa di più specifico e l'eventuale codice a cui eri già arrivato, tanto meglio... non sempre si è disposti a scrivere per intero un programma per "prigrizia" del richiedente...

newtel
03-01-2006, 12:05
...hai ragione dovevo essere un pochino più preciso...

praticamente in MSQL eseguivo




ins_stmt =
conn.prepareStatement(
"insert into [TDB]"
+ " SELECT a.*"
+ " FROM "
+ " OPENROWSET('MSDASQL', "
+ " 'DRIVER={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=\\\\localhost\\Dati',"
+ " 'select * from db.txt') "
+ " AS a");



ma in mysql???? :bhò:
...mi manca qualcosa???...mmm..

LeleFT
03-01-2006, 14:04
Non puoi, semplicemente, leggere riga per riga il file ed eseguire una INSERT per ciascuna riga letta? Esempio:


BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream("mioFile.txt") ) );
String linea = "";
String query = "";
String[] campi = null;
while ((linea = br.readLine()) != null) {
campi = linea.split(" "); // Suppongo che ciascuna riga contenga
// i valori dei campi separati da spazio
query = "INSERT INTO TDB VALUES('" + campi[0];
for (int i=1; i<campi.length; i++) query += ", " + campi[i];
query += ");");
if ( !db.eseguiAggiornamento( query ) ) {
System.out.println("Impossibile aggiornare. Motivo: " + db.getErrore() );
}
}

Ciao. :ciauz:

newtel
03-01-2006, 15:28
...certo posso fare anche così...

vi spiego un pochino meglio...
la mia piccola procedura dovrebbe
1) importare il file con i dati.
2) poter aggiornare - inserire - cancellare un record
3) salvare il file dati.xxx su un'unità esterna senza lasciare alcuna traccia sul pc.

...si accettano consigli...

db si o db no???

Andrea1979
03-01-2006, 16:28
Se il file è il cassico CSV (valori separati da virgola, ma anche per estensione, qualunque altro separatore) segui la procedura che ti ha illustrato Lele: si legge riga per riga il file e si schiaffa dentro il database mysql.

Non so niente di MSSQL, ma fondamentalmente mi sembra che la procedura che illustri nella porzione di codice altro non faccia che caricare un qualche componente preposto ad interpretare i file CSV in modo trasparente all'implementatore.
Ora probabilmente qualcuno là fuori avrà sviluppato qualcosa del genere anche per java + mysql... ma visto che si tratta di poche righe di codice, senza sbattersi troppo a cercare, implementati tu la classe per la lettura del file e la creazione delle query.

[EDIT]
PS: DB sì! A maggior ragione se questi dati dovranno essere accessibili su altre piattaforme e da altri computer e possibilimente in contemporanea. L'alternativa, su file, era xml.

newtel
04-01-2006, 10:10
...ok i dati li sbatto dentro leggendo riga per riga...
...ma MYSQL ha un qualcosa che si chiama HISTORY dove tiene traccia di tutte le query eseguite...
...il mio problema è che al termine l' utente NON DEVE aver traccia di nulla sul pc...i dati devono essere SOLO ED ESCLUSIVAMENTE su un file.xxx...

chiedo perdono ma è la prima volta che uso mysql e...ufffff...non si riesce nemmeno a invertire i campi di una tabella??...che fastidiooo!

GRAZIEEEE!

Andrea1979
04-01-2006, 10:20
Stai confondendo le acque: prima parli di database, poi di file... decidi che devi fare una volta per tutte. Per modificare una tabella (struttura) si usa ALTER TABLE.

newtel
04-01-2006, 11:59
...mmmm...
non sto confondendo le acque...magari mi sono espresso male...

1) importo il file.xxx nel DB
2) gestisco insert - update - delete
3) scarico tutto nel file.xxx
4) cancello tutto dal db

...ora se era possibile gestire comodamente i dati senza usare il DB pazienza...a meno che tu mi dia qualche dritta per arrivare al risultato senza usare il DB.

per quanto riguarda ALTER
Partiamo dal presupposto che è la prima volta che uso MYSQL, con MSSQL era molto più semplice...

ma se cambio il nome del campo in contenuto non si sposta!!

es. voglio spostare il nome prima del cognome...
risultato --> sotto il campo nome mi ritrovo tutti i cognomi e viceversa...

spero di essere stato un pochino più chiaro...e grazie!!

Andrea1979
04-01-2006, 12:40
certamente che si può fare senza database! Potevi dirlo subito che ti serviva fare!

leggi il file con BufferedReader, splitti con StringTokenizer o direttamente con split di String, sposti gli indici degli array come meglio credi, rischiaffi nel file con BufferedWriter. Fine della fiera.

Loading