我正在尝试使用来自用户选择的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));
答案 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