2013-08-28 3 views
0

안녕하세요 저는 MySQL 데이터베이스에 전자 메일 주소를 저장할 수있는 작은 응용 프로그램을 만들려고합니다. 내가 한 일은 Java Class 파일 (ec.java)과 데이터베이스에 이것을 실행하기위한 코드가 잘 작동하는 연결을 생성했다는 것입니다.JFrame에서 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); 
    } 

이거 야? "개인"의 ause. 그것은 나를 혼란스럽게합니다. 미리 감사드립니다! ec.java에서

+0

을 살펴하실 수 있습니다 자세한 내용과 아이디어

에 대한 Classes and Objects을 통해 읽기를 데려 가고 있습니다. actionPerformed 메소드에서 현재 main 메소드에있는 연결 코드를 입력하십시오. 희망이 도움이 당신에게 몇 가지 힌트를 제공합니다. –

답변

0

메이크업 콘 정적 변수, 다음 버튼 액션 이벤트에 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); 
    } 
+0

이것은 대부분 NullPointerException을 유발할 가능성이 큽니다. – MadProgrammer

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가 제대로 작동 할 수없는 컨텍스트를 나타내므로 가끔 주 양식의 생성자와 같은 종속성을 전달할 수 있습니다. 그 외에는 다른 사람들이 제안한 것처럼 액션, 이벤트 리스너 또는 공장 패턴을 조작 할 수 있습니다.

0

, 이것은 단지 하나의 당신이 얻을 수있는 여러 가지 방법이 있습니다 (그리고 그것은 가능한 Factory 패턴의 아주 기본적인 예의 시작이다) 당신은 어떤 방법을 제공해야

되도록 ec 클래스 그 기능을 폭로 할 수 있습니다 ...

뭔가 더 좋아해요 ...당신의 UI 클래스 다음

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) { 
      } 
     } 
    } 
} 

, 당신은 간단한 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 프로그래밍입니다. 당신은 또한 메인 클래스에서 프레임의 인스턴스를 생성 해보십시오 Code Conventions for the Java Programming Language

관련 문제