java - 将数据库值加载到 Vector

标签 java database vector

我们有一个数据库,在这个数据库中有一个表“content”和 3 列“id”、“movie_name”、“movie_category”。

我们想将这个值加载到 Vector 并显示它,但是有一个问题,我们只能得到“空”值。

我们如何解决这个问题?

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

}

}

最佳答案

问题是您声明了实例变量 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

修复后的代码:

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

关于java - 将数据库值加载到 Vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27581710/

相关文章:

java - 数据绑定(bind)框架zk

sql - 如何交换表中 2 条记录的列值?

sql - 比较 sql server 中的日期和月份以获取警报系统

haskell - Haskell的Data.Vector没有提供集合运算符,原因是什么

ruby - 在 Ruby 1.9.3 中,一个向量不能乘以另一个向量?

java - 导出为可运行的 jar,但带有可编辑的属性文件?

java - 这是在 Java 中进行转换的更好方法

java - 如何在 HashMap 中添加多个具有相同键的相同类型的对象

sql - 对于这个特定的数据库设计问题,您会使用哪种方法?

c++ - 用迭代器修改容器的内容