我们有一个数据库,在这个数据库中有一个表“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 .
- 将
System.out.print(d.database())
更改为System.out.print(d.data)
- 删除声明
public String vString
- 使
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/