1

we have a database and in this database there is one table "content" and 3 columns "id", "movie_name", "movie_category".

We want to load this values to Vector and show it but there is a problem that we just get "null" value.

How can we fix this ?

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());

}

}
Luís Cruz
  • 14,780
  • 16
  • 68
  • 100
Burak Kurt
  • 39
  • 1
  • 6

1 Answers1

2

Problem is you declared instance variable vString but you never assign anything to it, so it stays (auto)initialized with null. Inside the while loop you declare a local varibale vString and it is used for storing data retrieved from database. After while loop ends, local varibale vString is not more. In main method you print the result of database() method what is null stored in the instance variable vString. Your problem is known as Variable shadowing.

  1. Change System.out.print(d.database()) to System.out.print(d.data)
  2. Delete declaration public String vString
  3. Make database() method return void

Repaired code:

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);
}
Lukas Risko
  • 1,435
  • 14
  • 25