Ciao a tutti,
sto scrivendo un programma che importando le informazioni da un file .txt esterno, li carichi in un database.
Il file txt, molto lungo, è così composto (AnagraficaLibri.txt)
Praticamente: titolo#autore#casaEditrice#anno.codice:West side Transilvania#Marks John#E/O#2010 Una faccenda privata#Iles Greg#Piemme#2010 Il bizzarro museo degli orrori#Rhodes Dan#Newton Compton#2010 L' amore del bandito letto da Rolando Ravello#Carlotto Massimo#Emons#2010 Spelix. Storia di gatti# di stranieri e di un delitto#Rivera Annamaria#Dedalo#2010 Jane e l'arcano di Penfolds Hall#Barron Stephanie#TEA#2010 Hunted. La casa della notte#Cast P. C.; Cast Kristin#Nord#2010 Gli illuminati#Bello Antoine#Fazi#2010 Tredici ore#Meyer Deon#E/O#2010
Questi dati vanno caricati nel database LIBRERIA, nella tabella libro. Segue il codice sql.
A questo punto mi sono creato un'applicazione JAVA per eseguire ciò che volevo:codice:create table if not exists libro ( id_libro int auto_increment not null, titolo text not null, autore text not null, casaEditrice text not null, anno year not null, primary key (id_libro) ) engine=innodb;
Ho utilizzato come delimitatore l'invio e come split il #. L'errore che mi stampa è: java.sql.SQLException: Field 'autore' doesn't have a default value, cioè "il campo autore non ha un valore di default", ed effettivamente così dovrebbe essere visto che i dati glieli sto passando io manualmente. Infine, mi sono accorto che non legge tutto il file ma si ferma ad un certo punto. Anche qui, non ho capito perchè.codice:import java.io.*; import java.sql.*; import java.util.*; public class LetturaFile { public static void main(String[] args) throws Exception { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/LIBRERIA?" + "user=user&password=xxx"); Statement stmt = conn.createStatement(); Scanner anagrafica = new Scanner(new File("AnagraficaLibri.txt")); anagrafica.useDelimiter("/n"); while(anagrafica.hasNext()){ StringTokenizer split = new StringTokenizer(anagrafica.next(),"#"); while(split.hasMoreTokens()){ for(int i=1; i<=4; i++){ if (i==1){ String titolo = split.nextToken(); stmt.executeUpdate("INSERT INTO libro(titolo) VALUES ('"+titolo+"')"); } else if (i==2){ String autore = split.nextToken(); stmt.executeUpdate("INSERT INTO libro(autore) VALUES ('"+autore+"')"); } else if (i==3){ String casaEditrice = split.nextToken(); stmt.executeUpdate("INSERT INTO libro(casaEditrice) VALUES ('"+casaEditrice+"')"); } else if (i==4){ String anno = split.nextToken(); stmt.executeUpdate("INSERT INTO libro(anno) VALUES ('"+anno+"')"); } } } stmt.close(); conn.close(); } } catch(ClassNotFoundException e) { System.out.println(e); } catch(SQLException e) { System.out.println(e); }finally{ System.out.println("Operazione effettuata."); } } }
p.s. Abbiate pietà, ho ore di studio e lavoro alle spalle!
Grazie in anticipo.

Rispondi quotando


