将数据库值加载到Vector

时间:2014-12-20 15:37:24

标签: java database vector

我们有一个数据库,在这个数据库中有一个表“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());

}

}

1 个答案:

答案 0 :(得分:2)

问题是你声明了实例变量vString但是你永远不会给它分配任何东西,所以它保持(自动)用null初始化。在while循环中,您声明了一个本地变量vString,它用于存储从数据库中检索的数据。 while循环结束后,本地变量vString不再是。在main方法中,您打印的database()方法的结果是null存储在实例变量vString中的结果。 您的问题称为Variable shadowing

  1. System.out.print(d.database())更改为System.out.print(d.data)
  2. 删除声明public String vString
  3. database()方法返回void
  4. 修复代码:

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