JAVA根据ComboBox的值设置String

标签 java

我试图通过使用基于用户选择的 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/

相关文章:

Java Web Start 无法自动下载并安装请求的版本

java - 在二维数组中找到最长的递增子序列

java - Recyclerview Adapter 中任何列表项的总和值

java - 如何使用外部应用程序获取 Soap Web 服务的请求和响应详细信息?

java - 在 Java 中编写 URL 或 URI 的惯用方式是什么?

java - 如何计算非 Double 类型的 Spark 统计信息

java - java的接口(interface)问题

java - SharedPreferences 使程序崩溃

java - Apache CXF 2.3.0 wsdl2java 错误无法在类路径中找到 jaxws21 前端

java - 尽管有一个可变成员,我怎样才能使这个类不可变?