您好我正在尝试构建一个允许我在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);
}
这是因为“私人”。这对我来说很困惑。提前谢谢!
答案 0 :(得分:0)
在ec.java中创建con静态变量,然后在ecframe上按钮动作事件调用mysql语句,并通过调用静态连接变量创建语句
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);
}
答案 1 :(得分: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无法正常运行,那么你可能偶尔会将这样的依赖项传递给主窗体的构造函数。除此之外,您可以像其他人所建议的那样摆弄动作,事件监听器甚至工厂模式。
答案 2 :(得分:0)
有很多方法可以达到这个目的,这只是一个(这是一个可能的Factory模式的基本示例的开始)
您需要提供某种方式,以便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以了解更多详情和想法