2013-04-01 5 views
1

Я новичок здесь, и у меня будет один вопрос, на который мне трудно получить ответ. Мне нужно настроить программу на Java, которая может позволить пользователю вставлять значения в базу данных на основе того, что они набирают в TextField. Вот 3 классов, которые я создал:Вставка значений из моего TextField в Java в базу данных

public class Odabrani{ 

    public int id; 
    String ime; 
    String prezime; 

     public Odabrani(int id, String ime, String prezime){ 

      this.id=id; 
      this.ime=ime; 
      this.prezime=prezime; 


     } 
} 


import com.mysql.jdbc.Connection; 
import com.mysql.jdbc.Statement; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 



    public class MySQL{ 
     public static Connection connect() throws InstantiationException, ClassNotFoundException, IllegalAccessException, SQLException{ 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/prodavnica", "root", ""); 
      return conn; 
     } 
    public static void Obrisi(int id) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ 
     Connection conn = connect(); 
     Statement st = (Statement) conn.createStatement(); 
     st.execute("delete from prodavac where id = " + id); 
     conn.close(); 
    } 


    public static List<Prodavac> GetProdavci() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException { 

    Connection conn = connect(); 
    Statement st = (Statement) conn.createStatement(); 
    st.executeQuery("select * from prodavac"); 
    ResultSet rs = st.getResultSet(); 
    List<Prodavac> pr = new ArrayList<Prodavac>(); 
    while(rs.next()){ 
     pr.add(new Prodavac(rs.getInt(1),rs.getString(2),rs.getString(3))); 
     //String ime = rs.getString(2); 

    } 
    conn.close(); 
     return pr; 

     } 

    public static void Dodaj(String ime, String prezime) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ 
     Connection conn = connect(); 
     PreparedStatement pst = conn.prepareStatement("insert into prodavac (id, ime, prezime) values (null,' ,') + ime, prezime;"); 
     conn.close(); 
    } 


    } 



import java.awt.Button; 
import java.awt.FlowLayout; 
import java.awt.Frame; 
import java.awt.List; 
import java.awt.TextField; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JComboBox; 
import javax.swing.JDialog; 
import javax.swing.JOptionPane; 
import javax.swing.JRootPane; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author v 
*/ 
**public class Main** { 
     static TextField unos; 
     public static Prodavac odabrani_prodavac; 
     public static JComboBox c; 
     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException{ 
     Frame f = new Frame("Biblioteka"); 
     f.setSize(300, 300); 
     f.setLocation(300, 300); 
     f.setVisible(true); 
     f.setLayout(new FlowLayout()); 
     c = new JComboBox(); 
     List l = new List(); 
     unos = new TextField(20); 
     f.add(unos); 

     unos.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       try { 
        MySQL.Dodaj(odabrani_prodavac.ime, odabrani_prodavac.prezime); 
       } catch (InstantiationException ex) { 
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (IllegalAccessException ex) { 
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (ClassNotFoundException ex) { 
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (SQLException ex) { 
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }); 




     Button b = new Button("obrisi"); 
     b.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        if(odabrani_prodavac!=null) 
        try { 
         MySQL.Obrisi(odabrani_prodavac.id); 
         c.removeAllItems(); 
         java.util.List<Prodavac> prlist = MySQL.GetProdavci(); 
         for(Prodavac p: prlist) 
          c.addItem(p); 

        } catch (InstantiationException ex) { 
         Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
        } catch (IllegalAccessException ex) { 
         Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
        } catch (ClassNotFoundException ex) { 
         Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
        } catch (SQLException ex) { 
         Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
        } 
       } 
      }); 

     java.util.List<Prodavac> prlist = MySQL.GetProdavci(); 
     for(Prodavac p: prlist) 
       c.addItem(p); 
     f.add(c); 
     f.add(b); 
     c.addItemListener(new ItemListener() { 

       @Override 
       public void itemStateChanged(ItemEvent e) { 
        if(e.getStateChange()==ItemEvent.SELECTED){ 
        Prodavac p = (Prodavac)e.getItem(); 
        odabrani_prodavac = p; 
        JOptionPane.showMessageDialog(null, "Odabrali ste: " + p.toString()); 
        } 
       } 
      }); 





     } 
} 

Теперь, если вы обратите внимание на это, вы можете увидеть, что и удаление() и gettAll() методы работают идеально, но это метод вставки (s) это меня беспокоит. Как я могу обойти этот код, поэтому текст, который пользователь вводит, получает в базу данных. Пожалуйста, порекомендуйте. Спасибо! Иван

+0

Вашего 'Insert' оператор имеет синтаксическую ошибку, пожалуйста, перечитайте синтаксис таких же. –

+0

В качестве примечания следует просто разместить код, относящийся к проблеме. В вашем случае вы упомянули «метод (ы) вставки». Гораздо проще устранить мелкие фрагменты кода ... –

+0

Итак, вот код, о котором я думаю, что ошибки могут исходить от: –

ответ

1

Изменения вставки заявления

PreparedStatement pst = conn.prepareStatement("insert into prodavac (id, ime, prezime) values (null,'"+ime+"','"+prezime+"'"); 
+0

Здравствуйте, ваш код мне кажется ОК, но моя программа все еще бросает на меня ошибки, возможно, это связано с тем, как вводимый текст помещается в базу данных, событие действия в основном классе? Я не знаю? –

+0

Можете ли вы показать мне ошибки – prasanth

+0

Исключение в потоке «AWT-EventQueue-0» java.lang.NullPointerException \t на Main $ 1.actionPerformed (Main.java:47) \t в java.awt.TextField.processActionEvent (TextField.java:594) \t в java.awt.TextField.processEvent (TextField.java:562) \t на java.awt.Component.dispatchEventImpl (Component.java:4630) \t в java.awt.Component.dispatchEvent (Component.java:4460) \t в java.awt.EventQueue.dispatchEvent (EventQueue.java:599) \t в java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:269) –

1

PreparedStatement предоставляет шаблонные символы для защиты от SQL Injection атак, а также ручку в качестве вставки кавычек, которые могут потребоваться. Кроме того, если id является автоматического приращения поля, вы можете пропустить это из SQL:

PreparedStatement pst = 
    conn.prepareStatement("insert into prodavac (ime, prezime) values (?, ?)"); 
pst.setString(1, ime); 
pst.setString(2, prezime); 
pst.executeUpdate(); 
+0

Да, auto_increment был помещен в столбец с идентификатором, поэтому мне нужно только указать имя и фамилию, но даже после того, как я применил ваш код, программа все еще не работает, hmm? –

+0

Вы назвали' executeUpdate'? См. Обновление – Reimeus

+0

Да, сэр, я сделал. –

Смежные вопросы