JAVA设置基于ComboBox值的String

时间:2015-07-23 09:04:05

标签: java

我正在尝试使用来自用户选择的ComboBox的String中的列名来搜索数据库,并根据用户选择的内容分配字符串,当我输入SQL语句时,String为NULL。请帮忙谢谢!这是我的代码:

String[] searchOptions={"ID","First Name","Middle Name","Last Name","Gender","Date of Birth","Nationality","Contact number"};
JComboBox comboBoxOption = new JComboBox(searchOptions);

textFieldSearch = new JTextField();
textFieldSearch.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent arg0) {

    try 
        String selected = (String)comboBoxOption.getSelectedItem();

        if(selected.equals("ID"))
            {
                String optionSearch="guest_id";
                System.out.println("baby");
            }else if(selected.equals("First Name"))
            {
                String optionSearch="guest_fname";
            }else if(selected.equals("Middle Name"))
            {
                String optionSearch="guest_mname";
            }else if(selected.equals("Last Name"))
            {
                String optionSearch="guest_lname";
            }else if(selected.equals("Gender"))
            {
                String optionSearch="guest_gender";
            }else if(selected.equals("Date of Birth"))
            {
                String optionSearch="guest_dob";
            }else if(selected.equals("Nationality"))
            {
                String optionSearch="guest_nationality";
                System.out.println(optionSearch);
            }else if(selected.equals("Contact number"))
            {
                String optionSearch="guest_contact";
            }else
            {
                String optionSearch=" ";
            }

           String query="Select * from guest_tbl where '"+optionSearch+"' =? ";
            PreparedStatement pst = conn.prepareStatement(query);
            pst.setString(1, textFieldSearch.getText());
            ResultSet rs =pst.executeQuery();
            tableGuest.setModel(DbUtils.resultSetToTableModel(rs));

2 个答案:

答案 0 :(得分:1)

那甚至不应该编译。您在if(...)块中声明了一个新的“optionSearch”变量。

if( something ) {
    String myString = "x";
} 
System.out.println(myString); // This will NOT compile! myString is unknown here

这里的变量“myString”只能从它所声明的位置知道,直到结束括号。然后它消失了。所以你要做的是在每个块中声明一个新变量,然后在块完成后丢失。在所有块之后,您尝试访问它。这不起作用。

所以,你应该做的就是......

String myString = null; // or whatever default value you want...
if (something) {
    myString = "x";
} else if (something else) {
    myString = "y";
} // etc.
System.out.println(myString); // This will compile and work

在这里,你在开头声明“myString”,然后为它设置一些值,当然,然后可以使用它。在你的例子中,你设置它,忘记它,设置它,忘记它等等 - 然后尝试使用它。也许你在某处也有一些叫做“optionSearch”的变量,否则它就不会编译。

(顺便说一下,对于这样的if-blocks,我发现枚举是一种以更好的方式管理它的好方法。为每种可能性声明一个枚举常量并将所需的值存储在一个字段中。但这可能是一个此刻有点复杂。)

答案 1 :(得分:0)

您在if块中声明了String optionSearch,因此除此之外不知道它。声明并将String optionSearch设置为if块之外的某个默认值,然后根据条件为其分配不同的值。

String optionSearch = "";
if(selected.equals("ID"))
{
    optionSearch="guest_id";
    System.out.println("baby");
}else if(selected.equals("First Name"))
{
    String optionSearch="guest_fname";
}
....
//prepare statement