2014-02-10 2 views
0

MainWindows.java사용 비 정적 콤보는 자바

public class MainWindow extends javax.swing.JFrame { 

public MainWindow() { 
     initComponents(); 
    } 

private void initComponents() {......} 

private void GetSqlButonActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
     SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      String[] args1={"1"}; 
      SqlQuery.main(args1); 
     } 
    }); 
    } 

public static void main(String args[]) { 
    Look and feel setting code created by Netbeans 
java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new MainWindow().setVisible(true); 
      } 
     }); 
    } 

private javax.swing.JComboBox ComboBox1; 
private javax.swing.JButton GetSqlButon; 
} 

SqlQuery.java

import java.sql.*; 

public class SqlQuery { 

    static String Query = "select top 10 date,number from Records\n" + 
    "where date between '2014-01-01 10:00:00.000' and '2014-01-01 11:00:00.000'\n" + 
    "and ID='013'"; 

    public static void main(String args[]) { 

     try{ 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.100.100;user=sa;password=passsa;database=ExampleDB"); 
      Statement sta = con.createStatement(); 
      ResultSet rs = sta.executeQuery(Query); 
      ResultSetMetaData rsmd = rs.getMetaData(); 
      int columnsNumber = rsmd.getColumnCount(); 
      while (rs.next()) { 
      for (int i = 1; i <= columnsNumber; i++) { 
       if (i > 1) System.out.print(", "); 
       String columnValue = rs.getString(i); 
       System.out.print(columnValue + " " + rsmd.getColumnName(i)); 
      } 
     System.out.println(""); 
      } 
      con.close(); 
      } 

     catch (Exception e) 
      { 
      System.out.println("Baglanti Hatasi"); 
      } 

    } 


} 

에 다른 클래스에 vaules.

나는 콤보 박스에 문제가있다. 내가 원하는; SqlQuery.java에서 결과 세트를 얻으려면 Jbutton을 누를 때 Combobox에서 선택한 값은이 행에 대해 SqlQuery.java에서 사용해야합니다. "ID = 'comboboxvalue'";

이 비 정적 값을 SqlQuery.java의 정적 메서드로 어떻게 보낼 수 있습니까?

나는 인스턴스를 만들어야 만하지만 어떻게되는지 모른다. 누군가 그것을 설명해 주시겠습니까?

+0

1) 두 가지'main' 메소드가 필요하거나 원하지 않습니다. 2) 'main'메소드를 명시 적으로 호출하지 마십시오. 3) 또한'SQLQuery'의 인스턴스를 만들고 콤보 박스에서 사용할 수있는 값을 반환하는 메소드를 가지고 있습니다. 4) 또 다른 제안은 GUI 빌더로 점프하기 전에 코드 스윙 GUI를 수작업으로 배우는 것입니다. [Swing으로 GUI 만들기] (http://docs.oracle.com/javase/tutorial/uiswing/)를 참조하십시오. –

답변

1

내 의견에 언급했듯이 두 개의 main 메소드가 필요하지 않습니다. 대신 SqlQuery의 인스턴스를 만들고 전달할 생성자에 값을 전달하도록하십시오. 이 같은 것

public class SqlQuery { 

    String comboBoxValue; 

    public SqlQuery(String value) { 
     comboBoxValue = value; 
    } 
} 

그러면 그냥 값을 전달할 수 있습니다. 당신이 그냥 정적 메서드에서 ResultSet 수익을 갖고 싶어 있도록 생성자에

String value = (String)comboBox.getSelectItem(); 
SqlQuery sql = new SqlQuery(value); 

또한 당신이 당신의 GUI 클래스에서 사용할 수있는, 그 결과를 반환해야 쿼리 것 같습니다.

public class SqlQuery { 
    public static ResultSet sendQuery(String value) { 

    } 
} 

같은 뭔가 그럼 그냥이

String value = (String)comboBox.getSelectItem(); 
ResultSet rs = SqlQuery.setQuery(value); 
// do something with result set. 

당신이 접근 할 수있는 방법을 제공하고 있습니다 할 수 있습니다.

또한 SQL 삽입을 피하려면 Statement 대신 PreparedStatement을 사용해야합니다.