Загрузить значения базы данных в вектор

1

у нас есть база данных, и в этой базе данных есть одна таблица "content" и 3 столбца "id", "movie_name", "movie_category".

Мы хотим загрузить эти значения в Vector и показать их, но есть проблема, что мы просто получаем значение "null".

Как мы можем это исправить?

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.Statement; 
import java.util.*;
import java.awt.*;
import javax.swing.*;

public class Data extends JPanel{

         Connection connection = null;  
         ResultSet resultSet = null;  
         Statement statement = null;  

         static Vector<Vector<String>> data = new Vector<Vector<String>>();
         public String vString;

         public String database(){
             try 
             {  
                 Class.forName("org.sqlite.JDBC");  
                 connection = DriverManager.getConnection("jdbc:sqlite:src//movies.db");  
                 statement = connection.createStatement();  
                 resultSet = statement.executeQuery("SELECT id, movie_name, movie_category FROM content");

                 Vector<String> columnNames = new Vector<String>();
                 columnNames.add("id");
                 columnNames.add("movie_name");
                 columnNames.add("movie_category");

                 while (resultSet.next()) 
                 {  
                     Vector<String> vString = new Vector<String>();

                     vString.addElement(resultSet.getString("id"));
                     vString.addElement(resultSet.getString("movie_name"));
                     vString.addElement(resultSet.getString("movie_category"));


                     data.add(vString);




                 }  
             } //try
             catch (Exception e) 
             {  
                 e.printStackTrace();  
             }
             finally 
             {  
                 try 
                 {  
                     resultSet.close();  
                     statement.close();  
                     connection.close();  
                 } 
                 catch (Exception e) 
                 {  
                     e.printStackTrace();  
                 }  
             }
            return vString;  
         }


public static void main(String[] args) {


    Data d = new Data();
    System.out.print(d.database());

}

}
  • 0
    Пожалуйста, разместите соответствующую часть кода здесь.
  • 0
    для хорошего понимания я выложу весь код
Теги:
database
vector

1 ответ

2
Лучший ответ

Проблема заключается в том, что вы объявили переменную экземпляра vString но вы никогда ничего не присваиваете ей, поэтому она остается (автоматически) инициализирована null. Внутри цикла while вы объявляете локальный varibale vString и используется для хранения данных, полученных из базы данных. После того, как цикл заканчивается, локальная переменная vString не больше. В main методе вы печатаете результат метода database() который является null хранящимся в переменной экземпляра vString. Ваша проблема известна как " Переменная затенение".

  1. Измените System.out.print(d.database()) на System.out.print(d.data)
  2. Удалить объявление public String vString
  3. Использовать метод database() return void

Восстановленный код:

public class Data extends JPanel{

     Connection connection = null;  
     ResultSet resultSet = null;  
     Statement statement = null;  

     static Vector<Vector<String>> data = new Vector<Vector<String>>();

     public void database(){
         try 
         {  
             Class.forName("org.sqlite.JDBC");  
             connection = DriverManager.getConnection("jdbc:sqlite:src//movies.db");  
             statement = connection.createStatement();  
             resultSet = statement.executeQuery("SELECT id, movie_name, movie_category FROM content");

             Vector<String> columnNames = new Vector<String>();
             columnNames.add("id");
             columnNames.add("movie_name");
             columnNames.add("movie_category");

             while (resultSet.next()) 
             {  
                 Vector<String> vString = new Vector<String>();

                 vString.addElement(resultSet.getString("id"));
                 vString.addElement(resultSet.getString("movie_name"));
                 vString.addElement(resultSet.getString("movie_category"));

                 data.add(vString);
             }  
         } //try
         catch (Exception e) 
         {  
             e.printStackTrace();  
         }
         finally 
         {  
             try 
             {  
                 resultSet.close();  
                 statement.close();  
                 connection.close();  
             } 
             catch (Exception e) 
             {  
                 e.printStackTrace();  
             }  
         }
     }


public static void main(String[] args) {
    Data d = new Data();
    d.database();
    System.out.print(d.data);
}
  • 0
    мы удаляем внешнюю vString, но когда мы пытаемся вернуть внутреннюю vString, также возникает проблема. Вы можете изменить эту часть кода?
  • 0
    я получаю [] в результате
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню