Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    24

    [JAVA]problema inserimento dati query

    Salvea tutti, mi servirebbe il vostro aiuto.
    Non riesco ad eseguire una query da un'interfaccia in java
    Ho provato in tutti i modi ma sembra che non ne voglia proprio sapere.
    Il bello è che il problema risulta solo con INSERT.

    Vi lascio il codice che utilizzo

    codice:
    public class Query{
    
    
        /**
         * @param args
         * @throws ClassNotFoundException 
         * @throws SQLException 
         */
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/ia";
            Connection con=DriverManager.getConnection(url,"root","");
            final Statement st = con.createStatement(); 
            
            final JTable table = new JTable();
            JScrollPane scrollPane = new JScrollPane(table);
            table.setFillsViewportHeight(true);
            table.setPreferredScrollableViewportSize(new Dimension(600,600));
            final JTextArea t=new JTextArea(5,20);
            t.setText("inserisci qui le query");
            t.setLineWrap(true);
            JScrollPane js2 = new JScrollPane(t);
            JButton b= new JButton("Invia Query");
            
            b.addActionListener(new ActionListener(){
    
    
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    try {
                        ResultSet rs=st.executeQuery(t.getText());
                        table.setModel(buildTableModel(rs));
                    } catch (SQLException e) {
                        JOptionPane.showMessageDialog(null, "query non valida");
                    }
                }});
            
            JButton bq1= new JButton("Nuovo");
            
            bq1.addActionListener(new ActionListener(){
    
    
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    try {
                        ResultSet rs= query1(st);
                        table.setModel(buildTableModel(rs));
                    } catch (SQLException e) {
                        JOptionPane.showMessageDialog(null, "query non valida");
                    }
                    catch (InputNotMatchingException i){
                        JOptionPane.showMessageDialog(null, i.getMessage());
                    }
                }});
            
            JPanel panel= new JPanel();
            JPanel panel2= new JPanel();
            
        
            panel.add(scrollPane);
            panel.add(b);
            panel2.add(bq1);
            panel2.add(bq2);
            panel2.add(bq3);
            panel2.add(bq4);
            panel.add(js2);
            panel.add(panel2);
            JFrame frame= new JFrame();
            frame.add(panel);
            frame.setSize(1000, 700);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        public static ResultSet query1(Statement s) throws InputNotMatchingException, SQLException{
            String a,b,c,d,e,f,g,h,i,l,m,n,o,p,q;
            a=JOptionPane.showInputDialog(null, "inserisci campo1");
            b=JOptionPane.showInputDialog(null, "inserisci campo2");
            c=JOptionPane.showInputDialog(null, "inserisci campo3");
            d=JOptionPane.showInputDialog(null, "inserisci campo4");
            e=JOptionPane.showInputDialog(null, "inserisci campo5");
            f=JOptionPane.showInputDialog(null, "inserisci campo6");
            g=JOptionPane.showInputDialog(null, "inserisci campo7");
            h=JOptionPane.showInputDialog(null, "inserisci campo8");
            i=JOptionPane.showInputDialog(null, "inserisci campo9");
            l=JOptionPane.showInputDialog(null, "inserisci campo10");
            m=JOptionPane.showInputDialog(null, "inserisci campo11");
            n=JOptionPane.showInputDialog(null, "inserisci campo12");
            o=JOptionPane.showInputDialog(null, "inserisci campo13");
            p=JOptionPane.showInputDialog(null, "inserisci campo14");
            q=JOptionPane.showInputDialog(null, "inserisci campo15");
    
            return s.executeQuery("insert into foglio1 `titolo`, `autore` values `\""+a+"\"',`\""+b+"\"')");
            
            }
            
            public static DefaultTableModel buildTableModel(ResultSet rs)
                throws SQLException {
    
    
            ResultSetMetaData metaData = rs.getMetaData();
    
    
            // names of columns
            Vector<String> columnNames = new Vector<String>();
            int columnCount = metaData.getColumnCount();
            for (int column = 1; column <= columnCount; column++) {
                columnNames.add(metaData.getColumnName(column));
            }
    
    
            // data of the table
            Vector<Vector<Object>> data = new Vector<Vector<Object>>();
            while (rs.next()) {
                Vector<Object> vector = new Vector<Object>();
                for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
                    vector.add(rs.getObject(columnIndex));
                }
                data.add(vector);
            }
    
    
            return new DefaultTableModel(data, columnNames);
    
    
        }
    
    
    }
    Ultima modifica di LeleFT; 27-10-2016 a 12:27 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da niuzz0 Visualizza il messaggio
    codice:
    		return s.executeQuery("insert into foglio1 `titolo`, `autore` values `\""+a+"\"',`\""+b+"\"')");
    La sintassi della insert è ... sbagliata. Mancano le parentesi tonde attorno al blocco dei nomi delle colonne, idem per i valori e i backtick (`) sicuramente non ci vanno quando passi i valori effettivi.
    Nota che i backtick servono per quotare gli identificatori (es. nomi di colonne, tabelle ...) quando il nome è uguale a quello di una parola chiave "riservata". Ma i backtick non sono obbligatori. Nel tuo caso titolo e autore non sono certo parole riservate.

    --> MySQL 5.7 Reference Manual - 14.2.5 INSERT Syntax


    P.S. te lo dico anche subito e sinceramente: l'intero design della classe, il modo di utilizzo delle risorse JDBC (mancano i close di tutte le risorse!), lo stile generale ecc.. sono altamente critici e problematici. Se questo lo hai fatto e buttato giù in 10 minuti giusto come prova super-veloce ... beh, ok. Vabbé, ci sta.
    Se invece è proprio quello a cui volevi arrivare .... no, non ci siamo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    @niuzz0: quando posti del codice, racchiudilo all'interno degli appositi tag CODE, così da mantenerne indentazione e formattazione. Ho corretto io.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.