Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20
  1. #11
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Mon91
    Grazie davvera, ma non va purtroppo neanche con gli apicetti... uffa
    Che errore ottieni? Puoi riportare il pezzo di codice aggiornato?

    Originariamente inviato da Mon91
    Hai un'idea per risolvere il problema della jTable?
    Quando riuscirò a leggere il codice senza diventare scemo
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #12
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    Originariamente inviato da Alex'87
    Che errore ottieni? Puoi riportare il pezzo di codice aggiornato?


    Quando riuscirò a leggere il codice senza diventare scemo
    codice:
    //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+')");
    errore:
    Exception in thread "main" java.sql.SQLException: table places already exists
    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:31)

    OVVIAMENTE! ma se scommento il DROP TABLE non mi da alcun errore, ma non riempe il db come dovrebbe... si riempe di soli 3kb...



    --------------------------------------------
    Posto il codice della tabella che mi da un errore sulle colonne:
    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();
    	}
    
    }
    Mi chiedevo se non fosse più facile riempire una jTable poi passare i valori delle colonne direttamente al database?
    Qualcuno può darmi qualche dritta?

  3. #13
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Mon91
    codice:
    //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+')");
    errore:
    Exception in thread "main" java.sql.SQLException: table places already exists
    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:31)

    OVVIAMENTE! ma se scommento il DROP TABLE non mi da alcun errore, ma non riempe il db come dovrebbe... si riempe di soli 3kb...
    Vedo ora che nel codice iniziale la drop table è in ciclo!

    Non puoi cancellare la tabella, ricrearla, inserire una riga, cancellare, ricreare ecc...!
    La creazione della tabella falla fare fuori! (a seconda del DBMS puoi farla condizionale, ESEMPIO "create table X if not exist" ecc)

    Se il codice iniziale fosse stato indentato me ne sarei accorto prima
    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. #14
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    codice:
    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();
    			indirizzi.add(nome);
    			indirizzi.add(localita);
    			indirizzi.add(telefono);
    			
    		}br.close();
    		
    		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+')");
    	}
    }
    Non mi da nessun errore, ma il database non si riempe!!

  5. #15
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Mon91
    codice:
    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();
    			indirizzi.add(nome);
    			indirizzi.add(localita);
    			indirizzi.add(telefono);
    			
    		}br.close();
    		
    		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+')");
    	}
    }
    Non mi da nessun errore, ma il database non si riempe!!
    Stai andando un po' allo sbaraglio...

    Stai ciclando il contenuto del file, ok, ma cosa fai con i token che hai letto? Niente! La insert va fatta DENTRO il ciclo se vuoi che ti inserisca gli elementi man mano che li leggi... (di conseguenza la tabella va creata PRIMA di iniziare il ciclo)

    Inoltre qual è il senso dell'ArrayList indirizzi? Ci butti dentro tutti i token che leggi, senza raggruppare ad esempio... Se faccio indirizzi.get(indice) cosa mi restituisce, un nome? un telefono? una località? boh..! Manca completamente la programmazione ad oggetti.

    Per finire, la query è sbagliata (te l'avevo corretta prima...)
    Con
    codice:
    "insert into places(nome1,localita1,telefono1) values(' + nome +', ' + localita + ', ' + telefono+')"
    non stai passando alcun nome, localita o telefono.. (stai passando la costante 'nome' ad esempio) anche perché nome, localita e telefono non esistono in quel punto (sono dichiarate dentro il while, sono visibili solo lì).

    La stringa corretta è

    codice:
    "insert into places(nome1,localita1,telefono1) values('" + nome + "', '" + localita + "', '" + telefono +"')";
    oppure, più chiaramente:

    codice:
    String query = String.format("insert into places(nome1, localita1, telefono1) values ('%s', '%s', '%s')", nome, localita, telefono);
    
    // ovviamente quando nome, localita e telefono saranno visibili...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #16
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    Il senso dell'ArrayList indirizzi vorrebbe essere un modo per salvare i dati del file che sto leggendo e salvare le sue terne per poi riempire colonne del database! Come dovrei fare? Che logica devo seguire secondo la programmazione ad oggetti?

    Non mi è molto chiaro come fare se mi spieghi cosa intendi e mi dai qualche consiglio sto cercando di imparare! Ti ringrazio molto per il tuo aiuto

    Ho provato a correggere:
    codice:
    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>();
    		s.executeUpdate("drop table places");
    		s.executeUpdate("create table places (" +
    				"nome1 VARCHAR(50) PRIMARY KEY, " +
    				"localita1 VARCHAR(50), " +
    				"telefono1 VARCHAR(50))");
    		BufferedReader br = new BufferedReader( new FileReader("Docs/DB.txt"));
    		String line;
    		while((line=br.readLine())!=null){
    			String t=line.replaceAll(":", " ");
    			String [] w=t.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);
    			 */
    			s.executeUpdate("insert into places(nome1,localita1,telefono1) values('" + nome + "', '" + localita + "', '" + telefono +"')");
    		}br.close();
    }
    }
    codice:
    Exception in thread "main" java.sql.SQLException: near "Tel": syntax error
    	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:36)
    Ho provato a mettere a posto il file di testo con un replaceAll
    codice:
     String t=line.replaceAll(":", " ");
    ma mi da lo stesso problema.. che cosa fare?

    posto anche la classe DB aggiornata:
    codice:
    public class DB {
    	
    	private String nome;
    	private String località;
    	private String telefono;
    	public DB(String nome, String località, String telefono) {
    		
    		this.nome = nome;
    		this.località = località;
    		this.telefono = telefono;
    	}
    	public String getNome() {
    		return nome;
    	}
            public void setNome(String nome) {
    		this.nome = nome;
    	}
            public String getLocalità() {
    		return località;
    	}
            public void setLocalità(String località) {
    		this.località = località;
    	}
            public String getTelefono() {
    		return telefono;
    	}
            public void setTelefono(String telefono) {
    		this.telefono = telefono;
    	}
            public String toString() {
    		return "DB [nome=" + nome + ", località=" + località + ", telefono="
    				+ telefono + "]";
    	}}

  7. #17
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Mon91
    Il senso dell'ArrayList indirizzi vorrebbe essere un modo per salvare i dati del file che sto leggendo e salvare le sue terne per poi riempire colonne del database! Come dovrei fare? Che logica devo seguire secondo la programmazione ad oggetti?

    Non mi è molto chiaro come fare se mi spieghi cosa intendi e mi dai qualche consiglio sto cercando di imparare! Ti ringrazio molto per il tuo aiuto
    Ad esempio, stai leggendo una riga da un file di testo. Cosa rappresenta quella riga, nel suo insieme? Un luogo mi pare di capire... Avrai quindi una classe Luogo (ad esempio). I singoli valori cosa sono? Il nome, un indirizzo e un numero di telefono. Ecco quindi tre campi per la tua classe.

    La classe DB è corretta, ha solo un pessimo nome. Rappresenta un DB? No, è un Luogo.
    ps: ti sconsiglio di usare lettere accentate nel codice.

    Quel codice inoltre fa troppe cose, tutte assieme: leggi il file, spezzi la riga, salvi a db...

    Potresti organizzare il tutto diversamente. Ad esempio, da una parte ha un oggetto che legge il file e man mano crea gli oggetti Luogo. La creazione vera e propria la potresti delegare ad un oggettino specializzato che si occupa anche di ripulire quello che sta leggendo (ad esempio, tu salvi a db tutto "Tel: 0523 763077" quando in realtà potresti mettere "0523763077").

    Poi avrai un oggetto che si occupa del db: crea la connessione, crea la tabella e, data una lista di luoghi (es.: List<Luogo>) si occupa di inserirli a db.

    Fai questo esercizio: prendi un pezzo di carta e prova a capire quali sono le entità in gioco e come interagiscono tra di loro.

    Originariamente inviato da Mon91
    codice:
    Exception in thread "main" java.sql.SQLException: near "Tel": syntax error
    	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:36)
    Ho provato a mettere a posto il file di testo con un replaceAll
    codice:
     String t=line.replaceAll(":", " ");
    ma mi da lo stesso problema.. che cosa fare?
    Penso che il problema siano alcune righe del file che leggi. Ad esempio questa:

    Al.Fi Srl; Rottofreno (Pc) 5, Via Curiel S.Nicolo'; Tel: 0523 763077

    Noti niente di strano? Mi riferisco all'apostrofo su S.Nicolo'. Cosa succede quando il token Rottofreno (Pc) 5, Via Curiel S.Nicolo' viene messo nella query di insert?
    Viene fuori questo:

    "... values('Al.Fi Srl;', 'Rottofreno (Pc) 5, Via Curiel S.Nicolo'', 'Tel: 0523 763077'"
    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. #18
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    codice:
    	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();
    
    				
    		s.executeUpdate("drop table places");
    		s.executeUpdate("create table places (" +
    				"codice INTEGER PRIMARY KEY," + 
    				"nome1 VARCHAR(50), " +
    				"localita1 VARCHAR(50), " +
    				"telefono1 VARCHAR(50))");
    		
    		BufferedReader br = new BufferedReader( new FileReader("Docs/DB.txt"));
    		String line;
    		String querySQL = "";
    		int codice = 0;
    		while((line=br.readLine())!=null){
    			String t=line.replaceAll(":", " ");
    			t=t.replaceAll("'", " ");
    			String [] w=t.split(";");
    			String nome=w[0].trim();
    			String localita=w[1].trim();
    			String telefono=w[2].trim();
    		
    			querySQL = "insert into places(codice,nome1,localita1,telefono1) values('" + codice +"','" + nome + "', '" + localita + "', '" + telefono +"')"; 
    			s.executeUpdate(querySQL);
    			codice++;
    		}br.close();}}
    Funziona
    Finalmente ho risolto! e crea il database nel modo corretto...
    Alex'87 grazie per i tuoi consigli e per la pazienza...

    Ora come ultima cosa vorrei inserire nel sito che sto creando (ahimè tutte queste fatiche sono per un sito web) la tabella che avevo postato qualche giorno fa... sono riuscito a correggerla e a riempirla come volevo. La mia domanda è: come posso fare a integrarla dentro la mia pagina web? ho due idee:devo copiare il codice della tabella dentro la jsp all'interno dei tag <% %> oppure devo trasferire il codice dentro la cartella WEB-INF di apache tomcat? Scegliendo la seconda ipotesi poi dovrei comunque legare le due pagine...

    Posto il codice della jTable:
    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 = 202;
    		// 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++) {
    				
    				row.addElement(" " + indirizzi.get(3 * i + j));
    			}
    			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();
    	}}
    HO TROVATO UNA VECCHIA DISCUSSIONE DEL FORUM DELLA QUALE RIPORTO IL CODICE.
    Forse stampa il contenuto della tabella ma io vorrei soltanto che essa apparisse, che fosse sul mio sito.

    codice:
    import javax.swing.*;
    import javax.swing.table.*;
    
    import java.awt.print.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.Dimension;
    
    public class StampaTabella implements Printable {
    
      JFrame frame;
      JTable tableView;
    
      public StampaTabella(JTable Tabella) {
      	tableView = Tabella;
      }
    
    	public void Stampa() {
    	  PrinterJob pj=PrinterJob.getPrinterJob();
    		pj.setPrintable(StampaTabella.this);
    		pj.printDialog();
    		try{
    		    pj.print();
    		}
    		catch (Exception ex) {
    			ex.printStackTrace();
    		}
    	}
    
      public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws
    PrinterException {
    	  Graphics2D  g2 = (Graphics2D) g;
    		g2.setColor(Color.black);
    		int fontHeight = g2.getFontMetrics().getHeight();
    		int fontDesent = g2.getFontMetrics().getDescent();
    		//leave room for page number
    		double pageHeight = pageFormat.getImageableHeight()-fontHeight;
    		double pageWidth = pageFormat.getImageableWidth();
    		double tableWidth = (double)tableView.getColumnModel().getTotalColumnWidth();
    		double scale = 1;
    		if (tableWidth >= pageWidth) {
    			scale =  pageWidth / tableWidth;
    		}
    		double headerHeightOnPage = tableView.getTableHeader().getHeight() * scale;
    		double tableWidthOnPage = tableWidth * scale;
    		double oneRowHeight = (tableView.getRowHeight() + tableView.getRowMargin()) *
    scale;
    		int numRowsOnAPage = (int)((pageHeight - headerHeightOnPage) / oneRowHeight);
    		double pageHeightForTable = oneRowHeight * numRowsOnAPage;
    		int totalNumPages= (int)Math.ceil(((double)tableView.getRowCount()) /
    numRowsOnAPage);
    		if(pageIndex>=totalNumPages) {
    			return NO_SUCH_PAGE;
    		}
    		g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    		g2.drawString("Page: "+(pageIndex+1),(int)pageWidth/2-35,
    		    (int)(pageHeight+fontHeight-fontDesent));//bottom center
    
    		g2.translate(0f,headerHeightOnPage);
    		g2.translate(0f,-pageIndex*pageHeightForTable);
    		//TODO this next line treats the last page as a full page
    		g2.setClip(0, (int)(pageHeightForTable*pageIndex),(int)
    		    Math.ceil(tableWidthOnPage),
    		    (int) Math.ceil(pageHeightForTable));
    
    		g2.scale(scale,scale);
    		tableView.paint(g2);
    		g2.scale(1/scale,1/scale);
    		g2.translate(0f,pageIndex*pageHeightForTable);
    		g2.translate(0f, -headerHeightOnPage);
    		g2.setClip(0, 0,(int) Math.ceil(tableWidthOnPage),
    			(int)Math.ceil(headerHeightOnPage));
    		g2.scale(scale,scale);
    		tableView.getTableHeader().paint(g2);//paint header at top
    		return Printable.PAGE_EXISTS;
    	}
    
    }
    Fatto questo per stampare una jtable scrivo questo codice:

    codice:
    StampaTabella prn = new StampaTabella(stat); // stat è la jtable da stampare
    prn.Stampa();
    prn = null;
    Scusate l'ignoranza, ma un semplice metodo print() non mi permette di stampare facilmente la tabella?

  9. #19
    Utente di HTML.it L'avatar di Mon91
    Registrato dal
    Jul 2013
    Messaggi
    52
    CHIUDETE PURE

    HO NECESSITA' DI UNA RISPOSTA SULLE TABELLE E FORSE AVREI DOVUTO APRIRE UNA NUOVA DISCUSSIONE, PROCEDO.

    GRAZIE A TUTTI

  10. #20
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ti consiglio comunque (per l'ennesima volta) di usare i PreparedStatement, che semplificano ENORMEMENTE quello che devi fare. Inoltre ti permette di fregartene di eventuali caratteri speciali presenti nei tuoi parametri (come l'apice ad esempio) in quanto ci pensa lui a escapizzarli (ricorda che togliere l'apice dalla tua stringa NON è la soluzione... può rimanere, ma bisogna sapere che va trattato in modo speciale)

    Ad esempio, dentro il ciclo puoi fare così:

    codice:
    String query = "insert into places(codice, nome1, localita1, telefono1) values(?, ?, ?, ?)";
    
    PreparedStatement preparedStatement = c.prepareStatement(query);
    preparedStatement.setInt(1, codice);
    preparedStatement.setString(2, nome);
    preparedStatement.setString(3, localita);
    preparedStatement.setString(4, telefono);
    preparedStatement.executeUpdate();
    ps: Cerca di dare dei nomi decenti alle variabili. c non vuol dire nulla mentre connection è un ottimo nome. Idem s.. piuttosto metti statement...


    Ho notato inoltre che stai usando un intero come chiave primaria. Ok, ma quindi mettilo anche autoincrementante, così sei sicuro di non inserire per sbaglio due volte lo stesso codice.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.