Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据库值加载到Vector_Java_Database_Vector - Fatal编程技术网

Java 将数据库值加载到Vector

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

我们有一个数据库,在这个数据库中有一个表“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 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循环中,您声明了一个本地变量varible
vString
,用于存储从数据库检索到的数据。while循环结束后,本地变量
vString
不会更多。在
main
方法中,您可以打印
database()
方法的结果,该方法存储在实例变量
vString
中的
null
。 你的问题被称为

  • System.out.print(d.database())
    更改为
    System.out.print(d.data)
  • 删除声明
    公共字符串vString
  • Make
    database()
    methodreturn
    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);
    }
    
    公共类数据扩展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”)添加值;结果仍然显示[]