2013-05-30 3 views
0

Проблема заключается в синтаксисе «generic» в методах setInt и setString. - Конечно, могут быть и другие проблемы, но позвольте мне рассказать вам, что я нашел.my дает пустой результат. Мой JTable пуст. Это не должно быть

Ниже представлен мой стол в mySql, который я пытаюсь выполнить с помощью java.

Id | CashFlowSensitive | Sp1 
----------------------------------- 
    37 |     1 | Hello 
1000 |     0 | Hello 
1401 |     0 | number3 
1500 |     0 | number4 
1504 |     1 | Hello 

Если я код, как «дать мне все строки, где CashFlowSensitive = 1 и Sp1 =„Hello“, то мой код работает. Это дает мне первую и последнюю строку, поскольку они точно соответствуют критериям фильтрации.

Теперь представьте, что я изменяю последнюю строку в таблице, заменяя запись Hello на number5. Таблица будет выглядеть следующим образом

Id | CashFlowSensitive | Sp1 
----------------------------------- 
    37 |     1 | Hello 
1000 |     0 | Hello 
1401 |     0 | number3 
1500 |     0 | number4 
1504 |     1 | number5 

Наконец я запускаю мой запрос с просьбой дать мне все строки, где «CashFlowSensitive» = 1. я должен получить 37 и 1504. К сожалению, это дает пустой Resultset. Мой JTable пуст. В этом неисправного примере я:

public void searchStringTest(DefaultTableModel model, Database db, int CashFlowSensitive, String Sp1) 
{ 
    int first = -77; 
    String second = "-55"; 

    String queryTest = " select * from helm.activitiesextended where CashFlowSensitive = ? and Sp1 = ? "; 

    try 
    { 
     java.sql.PreparedStatement selectStmt = CON.prepareStatement(queryTest); 

     if (first == -77) { 
      ((PreparedStatement) selectStmt).setInt(1, 1); 
     } else { 
      ((PreparedStatement) selectStmt).setInt(1, '%' + CashFlowSensitive + '%');  
     } 

     if (second == "-77") { 
      ((PreparedStatement) selectStmt).setString(2, "Hello"); 
     } else { 
      ((PreparedStatement) selectStmt).setString(2, "%" + Sp1 + "%"); 
     }    

     ResultSet rsTest = selectStmt.executeQuery(); 

     model.setRowCount(0);   

     while (rsTest.next())    
     { 
      Vector <Object> vector = new Vector<Object>(); 
      for (int columnIndex = 1; columnIndex <=4; columnIndex ++) 
      { 
       vector.add(rsTest.getObject (columnIndex));// pick next column 
      } 
      data.add(vector); 

      model.addRow(vector); 
     } 

У меня есть SearchString объявлен (INT CFS, INT ToBeMonitored, String Sp1, String Sp2, String Sp3 и добавление 7 PARAMATERS) Я определила мою строку запроса : выберите * из таблицы где CFS =? и ToBeMonitored =? и Sp1 =? и Sp2 =? и Sp3 =? и т.д., перечисляя десять параметров. Теперь, при любом запуске этого запроса, я активирую только max 4 параметра, например, я хочу отфильтровать 2 параметра: CFS и Sp1, остальные параметры должны быть нейтральными для процесса фильтрации, я называю это «нейтральным». При этом я настраивал подготовленные операторы ((PreparedStatement) selectStmt) .setInt (1, 1); // фильтр на этом ((PreparedStatement) selectStmt) .setInt (2, '%' + ToBeMonitored + '% «); // принимаем любое значение ((PreparedStatement) selectStmt) .setString (3, «Hello»); // фильтровать на этом ((PreparedStatement) selectStmt) .setString (4, "%" + Sp2 + "%") ; ((PreparedStatement) selectStmt) .setString (5, "%" + Sp3 + "%"); Как вы можете видеть, я выделяю свой sql для оценки параметров 1 и 3, игнорируя другие параметры, что делает их нейтральными в процессе фильтрации. Проблема: никаких результатов не создано несмотря на достоверные данные.

Ваш ответ немного не в том вопросе, который я поднял. Я хочу, чтобы вы соблюдали тот факт, что одна и та же строка запроса должна сохраняться снова и снова, независимо от того, какие параметры я хочу фильтровать при каждом отдельном прогоне. Например, если я только «включил» флаг CashFlowSensitive, тогда этот конкретный параметр должен быть активным при запуске запроса. Другие параметры должны вести себя нейтрально для процесса фильтрации. В других случаях я могу выбрать активировать поле Sp1 (поле CHAR), тогда другие поля должны лежать бездействующими. В других случаях я могу выбрать комбинацию из нескольких полей, те должны быть активными, а не выбранные поля должны быть нейтральными. Позвольте мне уменьшить объем вашего задания. 1) скажите мне, как запросить поле CHAR с использованием параметров привязки, где поле должно быть нейтральным в процессе фильтрации, другими словами, любой контент должен быть принят. 2) Можете ли вы также рассказать мне, как я могу проверить строку запроса, которую генерирует программное обеспечение

ответ

1

Проблема заключается в передаче значения для второго параметра в пути else.Ваш окончательный запрос будет выглядеть так:

select * from helm.activitiesextended 
where CashFlowSensitive = 1 and Sp1 = '%<value of Sp1>%' 

Это, очевидно, не возвращает никаких записей. Вы должны запросить только первый параметр, если вам просто нужен этот. Что-то вроде:

select * from helm.activitiesextended where CashFlowSensitive = 1