0

您好,我正在尝试构建一个小型应用程序,允许我将电子邮件地址存储在 MySQL 数据库中。我所做的是我创建了一个 Java 类文件 ( ec.java ) 和一个可以正常工作的连接以及用于在数据库中执行它的代码。

在 JFrame ( ecframe.java ) 中,我创建了一个文本字段和一个按钮。当输入电子邮件地址并按下按钮时,它将将此信息存储到一个名为 textFieldValue 的字符串中。但我不知道如何将此字符串放入我的 ec.java 文件中。

这是我来自 ec.java 的代码:

package emailcollector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;


public class ec {

    public static void main(String[] args) {
        try{
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost", "admin", "pass");

            Statement stmt = (Statement) con.createStatement();

            String email = textFieldValue;

            String insert = "INSERT INTO emails VALUES ('" + email + ")";

            stmt.executeUpdate(insert);
        }catch(Exception e) {
    }
    }
}

这是我在 ecframe.java中的代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String textFieldValue = jTextField1.getText();

        JOptionPane.showMessageDialog(this, "Added: \nEmail: " + textFieldValue);
    } 

这是因为“私人”。这让我很困惑。提前致谢!

4

3 回答 3

0

在ec.java中制作con静态变量,然后在ecframe on button action event调用mysql语句,通过调用静态连接con变量创建语句

package emailcollector;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;


public class ec {

    public static Connection con;
    public static void main(String[] args) {
        try{
            con = DriverManager.getConnection("jdbc:mysql://localhost", "admin", "pass");


        }catch(Exception e) {
    }
    }
}

ecframe.java

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            String textFieldValue = jTextField1.getText();

        Statement stmt = (Statement) ec.con.createStatement();

            String email = textFieldValue;

            String insert = "INSERT INTO emails VALUES ('" + email + ")";

            stmt.executeUpdate(insert);
    } 
于 2013-08-28T23:29:06.637 回答
0

通常我喜欢让我的组件相互独立,而不是让事情变得静态。特别是,我喜欢 JFileChooser 和 JColorChooser 的工作方式,因此我喜欢在这里通过使用模态 JDialog 或 JOptionPane 来模拟它们的功能。

例如,下面是一个简单的面板,它代表一个接收电子邮件的表单:

class EmailForm extends JPanel {
    private JTextField emailField = new JTextField(20);

    public EmailForm() {
        add(new JLabel("Email"));
        add(emailField);
    }

    public String getEmail() {
        return emailField.getText();
    }
}

在您的主要方法中,您只需说:

EmailForm form = new EmailForm();
int option = JOptionPane.showConfirmDialog(null, form, "Email", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
    System.out.println(form.getEmail());
}

现在,如果在您的情况下无法使表单独立,并且保存该数据库连接的类表示一个上下文,没有该上下文 UI 无法正常运行,那么您可能希望偶尔将这样的依赖项传递给主表单的构造函数. 除此之外,您可以像其他人建议的那样摆弄动作、事件侦听器甚至工厂模式。

于 2013-08-28T23:42:20.183 回答
0

有很多方法可以实现这一点,这只是一种(它是可能的工厂模式的一个非常基本的示例的开始)

您需要提供某种方式,以便ec该类可以公开其功能......

更像...

public class EmailManager {

    private Connection con;

    protected Connection getConnection() {
        if (connection == null) {
            con = DriverManager.getConnection("jdbc:mysql://localhost", "admin", "pass");
        }
        return con;
    }

    public void close() throws SQLException {
        if (con != null) {
            con.close();
        }
        con = null;
    }

    public void insertEmail(String email) throws SQLException {
        Statement stmt = null;
        try {
            Statement stmt = getConnection().createStatement();
            int count = stmt.execute("insert into emails values ('" + email + "')");
            if (count != 1) {
                throw new SQLException("Failed to insert new email");
            }
        } finally {
            try {
                stmt.close();
            } catch (Exception exp) {
            }
        }
    }
}

然后在您的 UI 类中,您只需创建一个实例ec并根据需要访问它的方法......

private EmailManager manager;

/*...*/

protected EmailManager getEMailManager() {
    if (manager == null) {
        manager = new EmailManager();
    }
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String textFieldValue = jTextField1.getText();
    try {
        getEMailManager().insertEmail(textFieldValue);
    } catch (SQLException exp) {
        JOptionPane.showMessageDialog(this, "Failed to insert email into database", "Error", JOptionPane.ERROR_MESSAGE);
        exp.printStackTrace();
    }
} 

无意冒犯,但所有这些都是基本的 OO 编程。您可能想阅读Classes and Objects以了解更多详细信息和想法

您可能还想看看Java 编程语言的代码约定

于 2013-08-28T23:42:44.653 回答