Java 将数据库值加载到Vector
我们有一个数据库,在这个数据库中有一个表“content”和3列“id”、“movie\u name”、“movie\u category” 我们希望将这个值加载到向量并显示它,但有一个问题,我们只得到“null”值 我们如何解决这个问题Java 将数据库值加载到Vector,java,database,vector,Java,Database,Vector,我们有一个数据库,在这个数据库中有一个表“content”和3列“id”、“movie\u name”、“movie\u category” 我们希望将这个值加载到向量并显示它,但有一个问题,我们只得到“null”值 我们如何解决这个问题 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import jav
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());
}
}
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入java.util.*;
导入java.awt.*;
导入javax.swing.*;
公共类数据扩展了JPanel{
连接=空;
ResultSet ResultSet=null;
Statement=null;
静态向量数据=新向量();
公共字符串vString;
公共字符串数据库(){
尝试
{
Class.forName(“org.sqlite.JDBC”);
connection=DriverManager.getConnection(“jdbc:sqlite:src//movies.db”);
statement=connection.createStatement();
resultSet=statement.executeQuery(“从内容中选择id、电影名称、电影类别”);
向量列名称=新向量();
列名称。添加(“id”);
添加(“电影名称”);
columnNames.add(“电影类别”);
while(resultSet.next())
{
Vector vString=新向量();
添加元素(resultSet.getString(“id”);
vString.addElement(resultSet.getString(“电影名称”);
vString.addElement(resultSet.getString(“电影类别”);
data.add(vString);
}
}//试试看
捕获(例外e)
{
e、 printStackTrace();
}
最后
{
尝试
{
resultSet.close();
语句。close();
connection.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
返回vString;
}
公共静态void main(字符串[]args){
数据d=新数据();
System.out.print(d.database());
}
}
问题是您声明了实例变量vString
,但您从未为其分配任何内容,因此它保持(自动)初始化为null
。在while循环中,您声明了一个本地变量variblevString
,用于存储从数据库检索到的数据。while循环结束后,本地变量vString
不会更多。在main
方法中,您可以打印database()
方法的结果,该方法存储在实例变量vString
中的null
。
你的问题被称为
System.out.print(d.database())
更改为System.out.print(d.data)
公共字符串vString
database()
methodreturnvoid
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);
}
公共类数据扩展JPanel{
连接=空;
ResultSet ResultSet=null;
Statement=null;
静态向量数据=新向量();
公共void数据库(){
尝试
{
Class.forName(“org.sqlite.JDBC”);
connection=DriverManager.getConnection(“jdbc:sqlite:src//movies.db”);
statement=connection.createStatement();
resultSet=statement.executeQuery(“从内容中选择id、电影名称、电影类别”);
向量列名称=新向量();
列名称。添加(“id”);
添加(“电影名称”);
columnNames.add(“电影类别”);
while(resultSet.next())
{
Vector vString=新向量();
添加元素(resultSet.getString(“id”);
vString.addElement(resultSet.getString(“电影名称”);
vString.addElement(resultSet.getString(“电影类别”);
data.add(vString);
}
}//试试看
捕获(例外e)
{
e、 printStackTrace();
}
最后
{
尝试
{
resultSet.close();
语句。close();
connection.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
公共静态void main(字符串[]args){
数据d=新数据();
d、 数据库();
系统输出打印(d数据);
}
请在此处发布代码的相关部分。为了更好地理解,我发布了整个代码。我们删除了外部vString,但当我们尝试返回内部vString时,也出现了问题。能否修改该部分代码?我更改了System.out.print(d.data());使用System.out.print(d.data);因为没有数据()方法,但我仍然得到相同的结果。您确定数据库中有数据吗?是的,我有一个名为“movies.db”的sqlite数据库,它在iti中有值。我尝试手动向vector vString.addElement(“a”)添加值;结果仍然显示[]