检查JTextField的内容,然后存储在String中以从另一个类进行访问

问题描述 投票:0回答:1

我正在创建一个Java应用程序,以允许用户通过GUI界面将数据插入MySQL数据库。它的结构是对所有GUI使用主类,然后对每个函数在外部使用单独的类(创建表,插入数据等)。

我已经在GUI部分中创建了一个函数,该函数通过使用actionListener来检查用户何时按下JButton,然后打开一个JOptionPane,该面板中包含带有一些JTextfields的面板,然后进入if / else语句进行检查如果第一个JTextField中包含文本(其余数据可以为null)。一旦此过程完成,它将在JTextField上运行getText并将其存储在字符串中。

主类:

package catalogue;

    addSupplier.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            //Call a JOptionPane and give it an int value to be able to check status of button presses without another ActionListner
            int result = JOptionPane.showConfirmDialog(null, addSupplierPanel, "Please enter supplier name", JOptionPane.OK_CANCEL_OPTION);
            //Checks if OK button is pressed
            if (result == JOptionPane.OK_OPTION){

                //Check if user entered any text into suppNameIn (Cannot be null)
                if(suppNameIn.getText().equals("")){

                    //Dispense error as suppNameIn is empty
                    System.out.println("Pressed Okay, nothing entered");

                } else {

                    //Grab the text from the JTextField and convert it into a usable string
                    String suppNameInsert = suppNameIn.getText();
                    String suppCollectionInsert = suppCollectionIn.getText();

                    //Confirmation that data has been read in from JTextField correctly
                    System.out.println(suppNameInsert + " Successfully entered");
                    System.out.println(suppCollectionInsert + " Successfully entered");

                    try{
                        //Connect to DB
                        Connection conn = CatalogueDB.getConnection();
                        //Prepare statement to run the insert script using the strings as input variables
                        PreparedStatement posted = conn.prepareStatement("INSERT INTO supplier (suppName, suppCollection) VALUES ('"+suppNameInsert+"', '"+suppCollectionInsert+"')");
                        //Push the PreparedStatement 'posted'
                        posted.executeUpdate();
                    //Catch if anything goes wrong while connecting to the database
                    } catch(Exception e){System.out.println("Error adding supplier");}
                    //Finish by printing a message to say the insert has worked.
                    finally{
                        System.out.println("Insert Completed.");
                    }
                }
            }
        }
    });
}

单独的insertData类:

package catalogue;

import java.sql.Connection;
 import java.sql.PreparedStatement;

public class insertData {
    CatalogueUI.suppNameInsert;

    public void insertSupplier() throws Exception{
        try{
            //Connect to DB
            Connection conn = CatalogueDB.getConnection();
            PreparedStatement posted = conn.prepareStatement("INSERT INTO supplier (suppName, suppCollection) VALUES ('"+suppNameInsert+"', '"+suppCollectionInsert+"')");
            posted.executeUpdate();
        } catch(Exception e){System.out.println("Error adding supplier");}
        finally{
            System.out.println("Insert Completed.");
        }
    }

}

我遇到的问题是我无法在主类之外访问String。我是否以错误的方式构建了我想要达到的目标,或者我遇到的问题比我想的要独立?

java swing jdbc
1个回答
0
投票

我无法在主类之外访问String

当然。类的工作独立于其他人。一个类不知道在其他任何类中正在使用什么变量。

如果要创建两个类,则需要将参数从一个类传递到另一个。调用方法并将参数传递给方法时,这没有什么不同。

我会说没有理由要开一个单独的课。 SQL访问只是您的主类中的一种方法。

PreparedStatement posted = conn.prepareStatement("INSERT INTO supplier (suppName, suppCollection) VALUES ('"+suppNameInsert+"', '"+suppCollectionInsert+"')");

此外,您正在错误地使用PreparedStatement。使用PreparedStatement的目的是将参数传递给PreparedStatement。正确使用PreparedStatement将使上面的代码更易于阅读和维护。

请参阅:Using Prepared Statements以获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.