2015-07-23 4 views
0

Я пытаюсь найти базу данных, используя имена столбцов из String на основе ComboBox, которые выбрал пользователь, и я назначаю строку, основанную на том, что пользователь выбрал, и когда я ввел оператор SQL String имеет значение NULL. Пожалуйста, помогите поблагодарить вас! Вот мой код:Настройка JAVA Строка на основе значения ComboBox

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

Я пробовал эту систему System.out.println (query); и это то, что он печатает «Select * from guest_tbl где« null »=?» –

+0

Программа будет компилировать bcz, который вы пишете запрос в кавычках, и вы определяете переменную optionSearch внутри блога if, следовательно, она равна нулю. Определите приведенную выше переменную и еще раз проверьте – Geek

+0

СПАСИБО! Я объявляю новый String optionSearch для каждого оператора if haha ​​ –

ответ

1

Это не должно даже компилироваться. Вы объявляете новую переменную optionSearch внутри блоков if (...).

Переменная «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», где-то там, иначе она не будет компилироваться.

(И btw, для таких if-блоков, я обнаружил, что перечисления - хороший способ управлять этим лучшим способом. Объявите константу перечисления для каждой возможности и сохраните требуемое значение в поле. немного сложнее на данный момент.)

+0

HAHAHA СПАСИБО ГОВЯТСЯ СЕЙЧАС Я ЗНАЮ МОЮ ОШИБКУ LOL: D –

0

Вы объявляете свой вариант StringSearch в блоке if, поэтому он не известен за пределами этого. Объявите и установите параметр 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 
Смежные вопросы