我试图通过使用基于用户选择的 ComboBox 的字符串中的列名来搜索数据库,并根据用户选择的内容分配一个基于字符串的字符串,当我放入 SQL 语句时,字符串为 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));
最佳答案
那甚至不应该编译。您正在 if(...) block 中声明一个新的“optionSearch”变量。
if( something ) {
String myString = "x";
}
System.out.println(myString); // This will NOT compile! myString is unknown here
这里的变量“myString”仅从声明它的位置到右括号为止都是已知的。然后就没有了。因此,您要做的就是在每个 block 中声明一个新变量,然后在 block 完成后该变量就会丢失。在所有的 block 之后,你尝试访问它。这是行不通的。
所以,你应该做的是......
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 block ,我发现枚举是以更好的方式管理它的好方法。为每种可能性声明一个枚举常量并将所需的值存储在一个字段中。但这可能是一个目前有点复杂。)
关于JAVA根据ComboBox的值设置String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582799/