Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52

    [Java] problema colonna database

    Alle prese con i database provo a leggere un file.txt e riempire un file.db!

    package beans;

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    import java.util.ArrayList;
    public class Main {


    public static void main (String [] args) throws Exception {

    Class.forName("org.sqlite.JDBC");
    Connection c = DriverManager.getConnection("jdbc:sqlite:db1.db");
    Statement s = c.createStatement();

    ArrayList<String> indirizzi= new ArrayList<String>();

    BufferedReader br = new BufferedReader( new FileReader("Docs/DB.txt"));
    String line;
    while((line=br.readLine())!=null){

    String [] w=line.split(";");
    String nome=w[0].trim();
    String localita=w[1].trim();
    String telefono=w[2].trim();
    //DB new_db= new DB(nome,localita,telefono);
    //indirizzi.add(new_db.località);
    s.executeUpdate("drop table places");
    s.executeUpdate("create table places (" +
    "nome1 VARCHAR(50) PRIMARY KEY, " +
    "localita1 VARCHAR(50), " +
    "telefono1 INTEGER(50))");
    s.executeUpdate("insert into places(nome1,localita1,telefono1) values(nome,localita,telefono)");
    }br.close();

    for (int i=0;i<indirizzi.size();i++)
    System.out.println(indirizzi.get(i));
    }
    }


    metto anche la stack:
    Exception in thread "main" java.sql.SQLException: no such column: nome
    at org.sqlite.DB.throwex(DB.java:288)
    at org.sqlite.NativeDB.prepare(Native Method)
    at org.sqlite.DB.prepare(DB.java:114)
    at org.sqlite.Stmt.executeUpdate(Stmt.java:102)
    at beans.Main.main(Main.java:35)

    Non capisco come saltarci fuori e dove sbattare la testa a volte questi codici ti fanno propria arrabbiare mannaggia! perchè non trova la colonna? qualcuno può darmi una mano?



    aggiungo anche un estratto del file di per chiarezza:
    Bennet Spa; Castelvetro Piacentino (Pc) Str. Statale 10 Cremona-Piacenza; Tel: 0523 825184
    Casamercato; Alseno (Pc) 118, V. Roma; Tel: 0523 945911
    Naturasi'; Piacenza (Pc) 70, V. Conciliazione; Tel: 0534 609769
    Al.Fi Srl; Rottofreno (Pc) 5, Via Curiel S.Nicolo'; Tel: 0523 763077
    Al.Fi Srl; Piacenza (Pc) 31, Viale S. Ambrogio; Tel: 0523 305512
    Basko S.P.A.; Castel San Giovanni (Pc) 2/B, Via Morselli E.; Tel: 0523 884358
    Basko Spa; Borgonovo Val Tidone (Pc) 9, Via Mottaziana; Tel: 0523 864583
    Basko Spa; Rottofreno (Pc) Via Emilia Est S.Nicolo'; Tel: 0523 762169
    Beverora Market S.N.C. Di Legatti M.C. & Rimondi J.; Piacenza (Pc) Via Emilia Pavese; Tel: 0523 498063
    Billa Ag; Castel San Giovanni (Pc) 1, Via Fellegara; Tel: 0523 882475
    Billa Aktiengesellschaft; Castel San Giovanni (Pc) Via Emilia Pavese; Tel: 0523 883687
    Borgo-Faxhall Borgo Food Srl; Piacenza (Pc) Piazzale Marconi Guglielmo; Tel: 0523 305231
    C.Market Srl; Fiorenzuola D'arda (Pc) 18, Via Pellico Silvio; Tel: 0523 981396
    C.Market Srl; Gragnano Trebbiense (Pc) 4, Via Trieste; Tel: 0523 788373
    Capuano Anna; Podenzano (Pc) 72, Via C. Colombo; Tel: 0523 551097
    Castorama Italia Spa; Piacenza (Pc) Strada Bobbiese; Tel: 0523 711431
    Centro Commerciale Gotico Soc. Cons. A R. L.; Piacenza (Pc) Via Emilia Parmense; Tel: 0523 606851

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    L'utilizzo del tag CODE è gradito, altrimenti non si capisce niente del codice che posti...
    Comunque:

    codice:
    s.executeUpdate("insert into places(nome1,localita1,telefono1) values(nome,localita,telefono)");
    non va bene: non stai passando al DBMS i valori di nome, localita e telefono... Quello che volevi fare è (se ho messo tutti gli apicetti)

    codice:
    s.executeUpdate("insert into places(nome1, localita1, telefono1) values ('" + nome +"', '" + localita + "', " + telefono + ")");
    Perché le colonne hanno un 1 alla fine?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [Java] problema colonna database

    Ti consiglio comunque di usare i PreparedStatement, ti evitano diversi problemi.

    http://docs.oracle.com/javase/tutori.../prepared.html
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52

    Re: Re: [Java] problema colonna database

    Originariamente inviato da Alex'87
    Ti consiglio comunque di usare i PreparedStatement, ti evitano diversi problemi.

    http://docs.oracle.com/javase/tutori.../prepared.html
    Ho appena cominciato a scrivere in java e non sono tanto esperto
    che cosa dovrei fare per usare il preparestatement?

  5. #5
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    Originariamente inviato da Alex'87
    L'utilizzo del tag CODE è gradito, altrimenti non si capisce niente del codice che posti...
    Comunque:

    codice:
    s.executeUpdate("insert into places(nome1,localita1,telefono1) values(nome,localita,telefono)");
    non va bene: non stai passando al DBMS i valori di nome, localita e telefono... Quello che volevi fare è (se ho messo tutti gli apicetti)

    codice:
    s.executeUpdate("insert into places(nome1, localita1, telefono1) values ('" + nome +"', '" + localita + "', " + telefono + ")");
    Perché le colonne hanno un 1 alla fine?
    Ho aggiustato il codice secondo il tuo consiglio, ma:

    codice:
    Exception in thread "main" java.sql.SQLException: unrecognized token: ":" 	at org.sqlite.DB.throwex(DB.java:288) 	at org.sqlite.NativeDB.prepare(Native Method) 	at org.sqlite.DB.prepare(DB.java:114) 	at org.sqlite.Stmt.executeUpdate(Stmt.java:102) 	at beans.Main.main(Main.java:35)
    MA NON CI SONO ":" NEL MIO CODICE!??

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Mon91
    Ho aggiustato il codice secondo il tuo consiglio, ma:

    codice:
    Exception in thread "main" java.sql.SQLException: unrecognized token: ":" 	at org.sqlite.DB.throwex(DB.java:288) 	at org.sqlite.NativeDB.prepare(Native Method) 	at org.sqlite.DB.prepare(DB.java:114) 	at org.sqlite.Stmt.executeUpdate(Stmt.java:102) 	at beans.Main.main(Main.java:35)
    MA NON CI SONO ":" NEL MIO CODICE!??
    ehm... "Tel: 0523 945911"

    Ma alla fine, il numero di telefono... lo consideri stringa o intero? Nello schema della tabella è un integer ma la variabile telefono è String...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Per l'uso di PreparedStatement la guida che ti ho linkato è abbastanza semplice, cosa non capisci in particolare?

    Qui c'è un esempio d'uso, anche questo piuttosto semplice
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    ti ringrazio per l'aiuto, ma nn funziona!

    codice:
    String [] w=line.split(";"); String nome=w[0].trim(); String localita=w[1].trim(); String telefono=w[2].trim(); //DB new_db= new DB(nome,localita,telefono); //indirizzi.add(new_db.località); s.executeUpdate("drop table places"); s.executeUpdate("create table places (" + "nome1 VARCHAR(50) PRIMARY KEY, " + "localita1 VARCHAR(50), " + "telefono1 varchar(50))"); s.executeUpdate("insert into places(nome1,localita1,telefono1) values('" + nome +"', '" + localita + "', " + telefono+")"); }br.close();


    In alternativa ad un database poi inizialmente mettere i miei dati in una tabella per poi vedere di passare le colonne al database o comunque pensare a qualcosa:
    codice:
      import java.awt.Dimension; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Vector;  import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn;   
    
     class TableExample extends JFrame { 	static ArrayList<String> indirizzi= new ArrayList<String>(); 	public static void leggi_txt(){ 		try{ 			String file= new String("DB.txt"); 			BufferedReader br = new BufferedReader(new FileReader(file)); 			 			 			 			String line; 			while((line=br.readLine())!=null){ 				 				String [] w=line.split(";"); 				String nome=w[0].trim(); 				String localita=w[1].trim(); 				String telefono=w[2].trim(); 				 				indirizzi.add(nome); 				indirizzi.add(localita); 				indirizzi.add(telefono); 				 				 				 			}br.close();   		}catch(IOException e){ 			e.printStackTrace(); 			System.exit(1);  		}}  	TableExample() { 		super("Address Book"); 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 		/////////////////////////////////////////////// 		// n° di righe 		int rows = 300; 		// n° di colonne 		int columns = 3; 		// etichette colonne 		String[] labels = {"nome", "indirizzo", "telefono"}; 		// larghezza colonne 		int[] widths = {50, 70, 120}; 		// vettore dati tabella 		Vector data = new Vector(0, 1); 		// vettore colonne tabella 		Vector columnNames = new Vector(0, 1); 		// popolo la tabella 		for(int i = 0; i < rows; i++) { 			
    // vettore singola riga tabella 			
    Vector row = new Vector(); 			
    for(int j = 0; j < columns; j++) { 				for(int z=0;z<indirizzi.size();z++) 				row.addElement(" " + indirizzi.get(i)); 			} 			data.addElement(row); 		} 		// intestazioni colonne 		for(int i = 0; i < columns; i++) { 			columnNames.addElement(labels[i]); 		} 		// modello dati della tabella 		DefaultTableModel tableModel = new DefaultTableModel(data, columnNames); 		// modello attributi delle colonne 		DefaultTableColumnModel columnModel = new DefaultTableColumnModel(); 		for(int i = 0; i < columns; i++) { 			// modello attributi colonna singola 			TableColumn column = new TableColumn(i, widths[i]); 			column.setHeaderValue(labels[i]); 			columnModel.addColumn(column); 		} 		// la tabella 		JTable table = new JTable(tableModel, columnModel); 		table.setPreferredScrollableViewportSize(new Dimension(350, 100)); 		JScrollPane scroll = new JScrollPane(table); 		/////////////////////////////////////////////////// 		getContentPane().add(scroll); 		pack(); 		setVisible(true); 	}  	public static void main(String[] args) { 		leggi_txt(); 		new TableExample(); 	}  }
    ma la tabella viene così:
    nome indirizzo telefono
    paolo paolo paolo
    via Roma via Roma via Roma
    57768 57768 57768
    AIUTO

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Scrivilo a mano il tag CODE, purtroppo tramite il pulsatino si perdono gli a capo...

    Originariamente inviato da Mon91
    ti ringrazio per l'aiuto, ma nn funziona!

    codice:
    String [] w=line.split(";"); String nome=w[0].trim(); String localita=w[1].trim(); String telefono=w[2].trim(); //DB new_db= new DB(nome,localita,telefono); //indirizzi.add(new_db.località); s.executeUpdate("drop table places"); s.executeUpdate("create table places (" + "nome1 VARCHAR(50) PRIMARY KEY, " + "localita1 VARCHAR(50), " + "telefono1 varchar(50))"); s.executeUpdate("insert into places(nome1,localita1,telefono1) values('" + nome +"', '" + localita + "', " + telefono+")"); }br.close();

    Prima in tabella il campo telefono1 era un integer e gli integer si inseriscono così come sono. Ora che è un varchar, in fase di insert il campo va indicato tra apicetti, come ho fatto con nome1 e localita1... E usando PreparedStatement non avresti di questi problemi
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    Originariamente inviato da Alex'87
    Scrivilo a mano il tag CODE, purtroppo tramite il pulsatino si perdono gli a capo...




    Prima in tabella il campo telefono1 era un integer e gli integer si inseriscono così come sono. Ora che è un varchar, in fase di insert il campo va indicato tra apicetti, come ho fatto con nome1 e localita1... E usando PreparedStatement non avresti di questi problemi
    Grazie davvera, ma non va purtroppo neanche con gli apicetti... uffa
    Hai un'idea per risolvere il problema della jTable?

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.