gpt4 book ai didi

java - 将数据库值加载到 Vector

转载 作者:搜寻专家 更新时间:2023-10-30 23:05:05 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com