2015-07-23 4 views
2

Я борюсь с набором результатов, который представляет пустые поля, где обычно должны быть значения (я протестировал запрос в Oracle SQL dev). Странно, потому что одно из моих полей («openDate» -> rs.getDate (5)) правильно выбрано, но не другие. Вот мой код:Java ResultSet анонимно возвращает пустые поля

public void refreshData() { 

     try { 

      Globals.itrackDatabase.connect(); 

      ResultSet rs; 
      rs = Globals.itrackDatabase.execQuery(Globals.caseRankingQuery + " WHERE case_num = '19816641'"); 

//   ResultSetMetaData metaData = rs.getMetaData(); 
//   int numberOfColumns = metaData.getColumnCount(); 

      while (rs.next()) { 

       System.out.println(rs.getString(1)); 
       Case caseObj = new Case(rs.getString(1), rs.getString(2), rs.getString(3), 
         rs.getString(4), rs.getDate(5), rs.getString(6), rs.getString(7), 
         rs.getString(8), null, rs.getString(9), rs.getString(10), 0); 

       Globals.caseList.add(caseObj); 
      } 

      for (int i = 0; i <= Globals.caseList.size()-1; i++) { 

       data[i][1] = Globals.caseList.get(i).id; 
       data[i][2] = Globals.caseList.get(i).service; 
       data[i][3] = Globals.caseList.get(i).module; 
       data[i][4] = Globals.caseList.get(i).summary; 
       data[i][5] = Globals.caseList.get(i).openDate; 
       data[i][6] = Globals.caseList.get(i).hub; 
       data[i][7] = Globals.caseList.get(i).endUser; 
       data[i][8] = Globals.caseList.get(i).endUserGroup; 
       data[i][9] = Globals.caseList.get(i).assignationDate; 
       data[i][10] = Globals.caseList.get(i).timeSpent; 
       data[i][11] = Globals.caseList.get(i).assignee; 
       data[i][12] = Globals.caseList.get(i).assigneeBacklog; 
      } 

      Globals.itrackDatabase.disconnect(); 
      System.out.println(Arrays.deepToString(data)); 
      this.fireTableDataChanged(); 

     } catch (SQLException e) { 
      System.out.println("Query failed."); 
      e.printStackTrace(); 
     } 
    } 

И:

public ResultSet execQuery(String query) { 

     try { 
      Statement stmt = connection.createStatement(); 
      System.out.println("Executing: " + query); 
      return stmt.executeQuery(query); 
     } catch (SQLException e) { 
      System.out.println("Query failed."); 
      e.printStackTrace(); 
      return null; 
     } 
    } 

Конструктор случае объект:

public Case(String id, String service, String module, String summary, 
       Date openDate, String hub, String endUser, String endUserGroup, 
       Date assignationDate, String timeSpent, String assignee, int assigneeBacklog) { 

     this.id = id; 
     this.service = service; 
     this.module = module; 
     this.summary = summary; 
     this.openDate = openDate; 
     this.hub = hub; 
     this.endUser = endUser; 
     this.endUserGroup = endUserGroup; 
     this.endUserGroup = endUserGroup; 
     this.assignationDate = assignationDate; 
     this.timeSpent = timeSpent; 
     this.assignee = assignee; 
     this.assigneeBacklog = assigneeBacklog; 
    } 

Этот запрос:

SELECT case_num, service, module, summary, open_date, case_hub, end_user, end_user_site, end_user_dept, time_spent, assignee 
FROM CASE 
WHERE case_num = '19816641'; 

Моя консоль отладки:

-------- Oracle JDBC Connection Testing ------ 
Connected to Itrack database. 
Executing: SELECT case_num, service, module, summary, open_date, case_hub, end_user, end_user_site, end_user_dept, time_spent, assignee FROM CASE WHERE case_num = '19816641' 

[[null, , , null, , 2015-07-19, , , , null, , , 0]] 
+0

Где находится запрос, который вы передаете вашему методу? –

+0

Просьба показать конструктор 'Case'. –

+0

Я не думаю, что это связано с объектом case, так как я сначала отлаживал свои результаты (я обновил свой пост с помощью запроса и конструктора case) – Jokas

ответ

0

Хорошо, нашел его: я должен был использовать ASCII поток поглотитель из результирующих, а затем я создал следующую функцию, чтобы изменить его в строку:

public String getStringFromInputStream(InputStream is) { 

     InputStreamReader in = new InputStreamReader(is); 
     String str = ""; 

     try { 
      while (in.ready()) { 
       str = str + (char) in.read(); 
      } 
      return str; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 

вы называете это следующим образом:

getStringFromInputStream(rs.getAsciiStream(1)) 

Надеюсь, это поможет.

Смежные вопросы