当前位置: 首页 > 知识库问答 >
问题:

建议将ResultSet对象从方法传递到Servlet吗?

支智志
2023-03-14

假设我有一个返回类型为ResultSet的方法。我能把这个对象传递给Servlet吗?我面对的是这个对象为null。

package sqlPackage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class SqlExample {
    public  ResultSet playerCountry() throws SQLException {
        
        ResultSet rs2 = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            String url2="jdbc:mysql://localhost:3306/mxplayerdb";
            
            String userName="root";
            String password="root";
            
            Connection connection2=DriverManager.getConnection(url2,userName,password);
            
            String query2="Select * from myplayers";
            
            Statement statement2=connection2.createStatement();
            ResultSet rs2Clone=statement2.executeQuery(query2);
      
            while(rs2Clone.next()) {
                String name=rs2Clone.getString("userName");
                System.out.println(name);//**this displays the relevant values**
            }
            rs2=rs2Clone;//**I had to do this as I was not able to return rs2CLone inside the try block**
            //return rs2Clone;
            
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        
        return rs2;// ***At this stage will this variable be null or referring to an object having data***
    }   
}

当我在一个Servlet中实例化这个类并调用这个方法时,它会收到一个空的ResultSet对象。我做错了什么?我们不能只从试块返回吗?

共有1个答案

穆城
2023-03-14

最好不要从方法返回ResultSet

这很容易导致资源泄漏,因为您被迫保持语句和连接打开。

更好的方法是使用尝试资源try with resources的目的是确保可靠地关闭资源。

像下面这样更改您的方法:

public List<String> playerCountry() {
    List<String> nameList = new ArrayList<>();
    String userName = "root";
    String password = "root";
    String url = "jdbc:mysql://localhost:3306/mxplayerdb";
    try (Connection connection = DriverManager.getConnection(url, userName, password);
        Statement statement = connection.createStatement();) {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String query = "Select * from myplayers";
        try (ResultSet rs = statement.executeQuery(query)) {
            while (rs.next()) {
                String name = rs.getString("userName");
                System.out.println(name);
                nameList.add(name);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return nameList;
}
 类似资料:
  • 我正在尝试将包含object的ArrayList从servlet传递到JSP。但是 Servlet文件: JSP文件:

  • 我正在尝试将某些值从servlet传递到JSP页面,并添加已传递到标记的值,阅读了许多文章,我得到了以下代码。 使用输入页面选择文件 验证上传的文件 调用上传。java将上传的文件保存在WEB-INF中 在上载的文件中,选定的文件保存为“我的”。txt 使用缓冲区读取文件内容并将其保存到变量 将其传递到JSP页面 上载JAVA 上传文件后, mypage.jsp 现在,当我点击上传按钮完成所有这些

  • 问题内容: 当我尝试将Servlet中的列表值设置为会话变量并像JSP一样访问它时, 做得到 JSP 我在JSP中遇到错误,因为“列表无法解析为类型” 那我该怎么做呢?我想将列表从Servlet传递到JSP并填充一个下拉列表。 问题答案: 您要导入列表和演员表吗?

  • 问题内容: 我正在尝试使用javascript将查询集从Django传递到模板。 我尝试了不同的方法来解决此问题: 1.普通方法-由于命名法[&gt Object:ID&lt,&gt Object:ID&lt,…],Javascript试图解析对象一团糟 Django视图 模板HTML + JS 2. JSON方法-Django无法将对象列表转换为不可序列化的JSON字符串 Django视图 模板

  • html或jsp向servlet发送值的唯一方式似乎是通过表单,我尝试的方法是将其作为隐藏参数传递,如下所示: 但是在我向其提交此表单的servlet中,我得到一个编译错误“String conly be converty to list”,用于以下内容: 只需先将参数转换为对象类型,然后再将其转换为列表,如下所示,就会产生相同的异常,但这一次是运行时异常: 是否有任何方法将列表传递给servle

  • 问题内容: 我试图将对象数组从js传递到rails 滑轨 在这里,记录器语句总是让我把 我期望下面的登录轨道。 问题答案: 您应该在Javascript中使用Javascript,该Javascript以数组或哈希作为参数(因为它们是唯一有效的JSON构造)。它返回一个形式,该形式是序列化为JSON的Javascript对象。 在Ruby方面,您将收到JSON编码的字符串,因此需要(在Rails中