Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515

    Errore elimina MultiSelect database...

    ciao a tutti!!

    ho creato un database e vorrei effettuare una eliminazione di dati con un multiselect ma mi da questo tipo di errore:

    java.lang.String cannot be cast to QueryEliminaMultiSelect

    per creare la classe ho scritto:

    codice:
    class QueryEliminaMultiSelect { 
    	int idNumDel;
    	String dataDelString;
    	String nomeDelString; 
    	String emailDelString;
    	String telDelString;
    	String fotoDelString;
    	String notificheDelString;
    	
    	public QueryEliminaMultiSelect(int id1, String data1, String nome1, String email1, String tel1, String foto1, String notifiche1) { 
    		idNumDel = id1;
    		dataDelString = data1;
    		nomeDelString = nome1;
    		emailDelString = email1;
    		telDelString = tel1;
    		fotoDelString = foto1;
    		notificheDelString = notifiche1;
    	} 
    	public String toString(){
    		return nomeDelString;
    	}
    	public int toInt(){
    		return idNumDel;
    	}
    }
    mentre all'evento click per eliminare i nomi selezionati ho scritto questo:

    codice:
    try {
    					Class.forName("org.sqlite.JDBC");
    				}
    				catch (Exception exc) {
    					exc.printStackTrace();
    				}
    				
    				try {			
    					int[] selezione = listEdit.getSelectedIndices();
    					conn = DriverManager.getConnection("jdbc:sqlite:db.sqlite");					
    					for (int i=0; i<selezione.length; i++) {						
    						QueryEliminaMultiSelect temp = (QueryEliminaMultiSelect)listEdit.getModel().getElementAt(selezione[i]);				
    						pstmt = (PreparedStatement) conn.prepareStatement("delete from dbPlanet where id="+temp.idNumDel);							
    						pstmt.executeUpdate(); 
    						modelEdit.removeElement(listEdit.getSelectedValue());
    						
    						pstmt.close();
    						conn.close();
    					}
    									
    					JOptionPane.showMessageDialog(null, "Nomi Eliminati!", "Messaggio...",JOptionPane.INFORMATION_MESSAGE );									
    					
    				}				
    				catch (Exception exc) {
    					exc.printStackTrace();
    				}
    ma mi da errore!!!

    dove sbaglio???

    stò impazzendo!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    a parte che fare "selezione.length" queries quando puoi farne una (con IN) mi sembra un bello spreco di risorse, ma mi pare anche di capire che tu faccia aprire la connessione al database fuori dal ciclo for, ma all'interno del ciclo for stesso tu la chiuda...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    ciao andrea in effetti hai notato dei piccoli ed essenziali difetti ma non ho capito questo:
    selezione.length" queries quando puoi farne una (con IN)...

    cmq ho riscritto il programma in questo modo:

    codice:
    try {            
                        int[] selezione = listEdit.getSelectedIndices();
                                            
                        for (int i=0; i<selezione.length; i++) {        
                            conn = DriverManager.getConnection("jdbc:sqlite:db.sqlite");
                            QueryEliminaMultiSelect temp = (QueryEliminaMultiSelect)listEdit.getModel().getElementAt(selezione[i]);                
                            pstmt = (PreparedStatement) conn.prepareStatement("delete from dbPlanet where id="+temp.idNumDel);                            
                            pstmt.executeUpdate(); 
                            modelEdit.removeElement(listEdit.getSelectedValue());                    
                            
                        }
                        pstmt.close();
                        conn.close();                
                        JOptionPane.showMessageDialog(null, "Nomi Eliminati!", "Messaggio...",JOptionPane.INFORMATION_MESSAGE );                                    
                        
                    }                
                    catch (Exception exc) {
                        exc.printStackTrace();
                    }

    ma mi da sempre lo stesso errore!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    scusa non avevo letto il messaggio di errore. Stai provando a fare un cast
    codice:
    QueryEliminaMultiSelect temp =(QueryEliminaMultiSelect)listEdit.getModel().getElementAt(selezione[i]);   
    


    illegale. Perché? Non ti serve ed è mal pensata: se devi "modelizzare" un record, crei una classe apposita. La tua JList conterrà una collezione di tale classe modello (con un toString appropriato), e ritornerai l'id (desunto da un ipotetico getId della classe modello) con cui andare ad effettuare la query di cancellazione
    [CODE]

    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    mi faresti un esempio???

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non vuole essere un esempio di buona programmazione, ma solo darti un'idea:

    modello record
    codice:
    public class MioRecord {
        
        private int id;
        private String descrizione;
        private int quantita;
        private double prezzo;
        
        public MioRecord(int id, String descrizione, int quantita, double prezzo) {
            this.id = id;
            this.descrizione = descrizione;
            this.quantita = quantita;
            this.prezzo = prezzo;
        }
        
        public int getId() {
            return this.id;
        }
        
        public String getDescrizione() {
            return this.descrizione;
        }
        
        public String toString() {
            return this.descrizione + " : " + this.prezzo;
        }
        
    }
    GUI di prova
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.List;
    
    
    /**
     *
     * @author Andrea
     */
    public class GUI extends JFrame implements ActionListener {
        
        private JList collezione;
        private JButton doQueryButton;
        
        public void actionPerformed (ActionEvent ae) {
            if (collezione.isSelectionEmpty()) {
                System.out.println("Selezione vuota");
            }
            else {
                String query = "DELETE FROM mytable WHERE id IN (";
                List<MioRecord> selection = collezione.getSelectedValuesList();
                for (MioRecord record : selection) {
                    query += record.getId()+", ";
                }
                query = query.substring(0, query.lastIndexOf(","))+ ")";
                System.out.println(query);
            }
        }
        
        public GUI() {
            super("Demo");
            collezione = new JList();
            DefaultListModel model = new DefaultListModel();
            
            // popolo la lista
            int[] id = new int[]{3, 7, 9,  11, 24};
            String[] descrizione = new String[]{"Pere", "Mele", "Banane", "Arance", "Fragole"};
            int[] quantita = new int[] {22, 4, 7, 9, 16};
            double[] prezzo = new double[]{1.34, 2.45, 3.11, 6.2, 0.54};
            
            for (int i = 0; i < id.length; i++) {
                MioRecord record = new MioRecord(id[i], descrizione[i], quantita[i], prezzo[i]);
                model.addElement(record);            
            }
            
            collezione.setModel(model);
            this.getContentPane().add(new JScrollPane(collezione), BorderLayout.CENTER);
            
            
            // Bottone di esecuzione query
            doQueryButton = new JButton("Esegui Query");
            this.getContentPane().add(doQueryButton, BorderLayout.SOUTH);
            doQueryButton.addActionListener(this);
            
            this.setSize(400, 400);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            
        }
        
        public static void main (String[] args) {
            new GUI();
        }
        
        
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it L'avatar di paul78
    Registrato dal
    Apr 2010
    Messaggi
    515
    grazie mille!!!

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.