2017-02-05 14 views
0
public void selectStudent() throws SQLException{ 
    try{ 
     con= this.getConnection(); 
     if(con!=null){ 
      // Create and execute an SQL statement that returns some data. 
      String SQL = "SELECT * FROM dbo.Student"; 
      stmt = con.createStatement(); 
      rs = stmt.executeQuery(SQL); 

      // Iterate through the data in the result set and display it. 
      while (rs.next()) { 
       for(int i=0;i<=5;i++){ 
         data[rs.getRow()][i]=rs.getString(i+1); 
       } 
      } 
      closeConnection(); 
     }else System.out.println("Error: No active Connection"); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

Я хочу добавить свои результаты из запроса JDBC SQL в массив двумерных объектов для будущего использования в таблице (swingUI). К сожалению, код выше не работает, и я не знаю, почему - я получаю ошибки при сохранении моих результатов в объекте данных.Загрузка результатов из JDBC в двумерную таблицу

Тип ошибки i get is NullPointerException.

+0

Какие типы данных вы уже инициализировали? –

+0

у нас в основном просто созданы простые данные Object [] []. Он не инициализирован. Мы использовали Object [] [], потому что таблицы swingUI принимают его как свои данные. – KONAKONA

ответ

1

Я думаю, что у вас есть объект, как это:

Object[][] data; 

Для этого вы получите сообщение об ошибке NullPointerException, потому что не инициализируется так, прежде чем положить свой результат в этом массиве вы РЕКОМЕНДУЕМЫМ инициализировать его следующим образом:

data = new String[numberOfRow][6]; 
while (rs.next()) { 
    for(int i=0; i<=5; i++){ 
     data[rs.getRow()][i]=rs.getString(i+1); 
    } 
} 

EDIT

Object[][] data = {{"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, 
      {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}}; 

Это заставит вас работать больше и больше, чтобы определить тип ваших атрибутов, поэтому я предлагаю вам создать новый тип, например:

public class TypeObject { 

    private String s1; 
    private String s2; 
    private String s3; 
    private String i1; 
    private boolean b1; 

    public TypeObject(String s1, String s2, String s3, String i1, boolean b1) { 
     this.s1 = s1; 
     this.s2 = s2; 
     this.s3 = s3; 
     this.i1 = i1; 
     this.b1 = b1; 
    } 

    //getters and setters 
} 

Так вместо того, чтобы использовать и Object[][] использование TypeObject[], и вы можете легко установить или получить ваши атрибуты, как это:

TypeObject[] data = new TypeObject[numberRow]; 
TypeObject d = new TypeObject(rs.getString("c1"), rs.getString("c2"), rs.getString("c3"), rs.getInt("c4"), rs.getBoolean("c5")); 

data[i] = d; 

Так преимущество этого способа:

  • Вы можете добавить новый столбец в вашем т так легко вы можете добавить новое поле в ваш TypeObject класс
  • Вы можете создать конструктор, как хотите.
  • and and
+0

Ну, наш объект определяется следующим образом: Object [] [] data. Я думал, что Объект - своего рода унивелярный тип? Потому что в учебнике таблицы это делается следующим образом: Объект [] [] data = { {"Kathy", "Smith", "Сноубординг", новый Integer (5), новый логический (false)}, { «John», «Doe», «Гребень», новый Integer (3), новый логический (true)} }; Нам нужно хранить несколько типов данных в нашем массиве. – KONAKONA

+0

да, вы можете перенести свой объект сначала на тип, который вы используете, например, следующим образом: 'Object [] [] data = new String [6] [6];' –

+0

и что, если нам нужно несколько типов данных, так же, как в наш пример? В этой таблице можно одновременно сохранить как строки, так и целые числа и логические значения. – KONAKONA

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

  • Нет связанных вопросов^_^