在Java中的另一个类上使用非静态Combobox值

时间:2014-02-10 13:16:20

标签: java swing static instance non-static

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");
           }   

    }


}

当我使用Jbutton时,我可以成功从SqlQuery.java中检索结果集。

我对Combobox有疑问。我想要;当按下Jbutton从SqlQuery.java获取结果集时,Combobox选择的值必须在SqlQuery.java中用于此行“和ID ='comboboxvalue'”;

如何将此非静态值发送到SqlQuery.java的静态方法?

我知道我必须创建实例,但我不知道如何。你能解释一下吗?

1 个答案:

答案 0 :(得分:1)

如我的评论中所述,您不需要两种main方法。相反,只需创建一个SqlQuery的实例,并拥有一个将传递一个值的构造函数。像这样的东西

public class SqlQuery {

    String comboBoxValue;

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

然后你可以传递价值。到构造函数

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

此外,查询应该返回结果,因此您希望只能从静态方法返回ResultSet,您可以在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.

有很多方法可以解决这个问题。

另请注意,您应该使用PreparedStatement而不是Statement来避免SQL注入。