【问题标题】:Inserting values from my TextField in Java into a database将 Java 中的 TextField 中的值插入数据库
【发布时间】:2013-04-01 17:14:16
【问题描述】:

我是这里的新手,我会遇到一个很难得到答案的问题。我需要用 Java 设置一个程序,使用户能够根据他们在 TextField 中键入的内容将值插入数据库。以下是我创建的 3 个类:

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());
                   }
               }
           });





       }
}

现在,如果您注意这一点,您会发现 delete() 和 gettAll() 方法都可以正常工作,但困扰我的是插入方法。我如何处理有问题的代码,以便将用户输入的文本存储到数据库中。请指教。谢谢你!伊万

【问题讨论】:

  • 您的Insert 语句有语法错误,请重新阅读相同的语法。
  • 附带说明,您应该只发布与问题相关的代码。就您而言,您提到了“插入方法”。解决较小的代码 sn-ps 问题要容易得多...
  • 好的,这是有问题的代码,我认为错误可能来自:
  • 代码太长,无法输入,但又一次:unos = new TextField(20); f.add(unos);按钮 a = new Button("插入"); f.add(a); a.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(unos!=null) /*这是一段代码应该出现的地方。基本上它应该读起来就像在textfield 通过调用 MySQL 类中的 insert 方法将其放入数据库: MySQL.Dodaj(String ime, String prezime)。如何获取存储在数据库中的 textfield 2B 中的文本?*/

标签: java swing jtextfield sql-insert actionevent


【解决方案1】:

将插入语句更改为

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

【讨论】:

  • 您好,您的代码在我看来还可以,但我的程序仍然向我抛出错误,这可能与输入文本放入数据库的方式有关,主要是动作事件班级?我不知道?
  • 线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException at Main$1.actionPerformed(Main.java:47) at java.awt.TextField.processActionEvent(TextField.java:594)在 java.awt.TextField.processEvent(TextField.java:562) 在 java.awt.Component.dispatchEventImpl(Component.java:4630) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt。 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 处的 EventQueue.dispatchEvent(EventQueue.java:599)
  • 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java :169) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
  • 你试过了吗PreparedStatement pst = conn.prepareStatement("insert into prodavac (ime, prezime) values ('"+ime+"','"+prezime+"'" );
【解决方案2】:

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();

【讨论】:

  • 是的,auto_increment 被放在了 id 列,所以我所要做的就是把名字和姓氏都放在里面,但是即使我应用了你的代码,程序仍然无法运行,嗯?跨度>
  • 好的,谢谢你们的帮助,这个谜题终于拼凑起来了。主要问题源于我无法从文本文件中获取文本,然后将其插入表格中。所以我做了什么我建立了另一个文本字段,我将从那里获取姓名和姓氏输入,将它们作为参数放在 MySQL.Dodaj() 方法中,然后从那里继续前进。我的 SQL 要求我插入代表用户输入的通配符(?,?,?),所以我的这个程序现在对我来说很完美。谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 2021-02-09
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多