当前位置: 首页 > 面试题库 >

从servlet访问数据

慕震博
2023-03-14
问题内容

我有一个要求,即只能从本地主机访问mysql数据库。我必须实现一个可以访问数据库的servlet,以允许该系统中的其他服务器访问数据(servlet可以充当代理)。但是,此系统由一个远程服务器组成,该服务器下载执行以下语句的大部分数据:

select * from database limit 100;

有人可以建议我如何编写一个以有效方式流式传输此类数据的servlet吗(我是数据库新手)?


问题答案:

首先,我不建议为此使用servlet。有关正确的方法,请参见aioobe和mdma的答案。但是,如果真的没有其他选择,请继续阅读:

只需在数据输入时 立即
将数据写入响应即可。不要将所有内容都存储在Java的内存中。所以基本上:writer.write(resultSet.getString("col"))。此外,默认情况下,MySQL
JDBC驱动程序将所有内容缓存在Java内存中,然后再提供给ResultSet#next()。您希望通过Statement#setFetchSize()按照MySQL
JDBC驱动程序文档
设置来逐行立即为数据提供数据。

这是一个启动示例,假设您想以CSV格式输出数据:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/csv");

    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    PrintWriter writer = response.getWriter();

    try {
        connection = database.getConnection();
        statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        statement.setFetchSize(Integer.MIN_VALUE);
        resultSet = statement.executeQuery("SELECT col1, col2, col3 FROM tbl");

        while (resultSet.next()) {
            writer.append(resultSet.getString("col1")).append(',');
            writer.append(resultSet.getString("col2")).append(',');
            writer.append(resultSet.getString("col3")).println();
            // PS: don't forget to sanitize quotes/commas as per RFC4130.
        }
    } catch (SQLException e) {
        throw new ServletException("Query failed!", e);
    } finally { 
        if (resultSet != null) try { resultSet.close; } catch (SQLException logOrIgnore) {}
        if (statement != null) try { statement.close; } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close; } catch (SQLException logOrIgnore) {}
    }
}


 类似资料:
  • 本教程假定您已经了解了 JDBC 应用程序的工作方式。在您开始学习 Servlet 数据库访问之前,请访问 Java MySQL 连接 来设置相关驱动及配置。 注意: 你可以下载本站提供的 jar 包:mysql-connector-java-5.1.39-bin.jar 在 java 项目中,只需要在 Eclipse 中引入 mysql-connector-java-5.1.39-bin.jar

  • 问题内容: 我想在JBoss中编写一个简单的servlet,它将在Spring bean上调用方法。目的是允许用户通过点击URL来启动内部工作。 在servlet中获取对Spring bean的引用的最简单方法是什么? JBoss Web服务允许您使用@Resource批注将WebServiceContext注入服务类。在普通servlet中,有什么可比的?解决此特定问题的Web服务将使用大锤压碎

  • 如何从Servlet访问JSF ViewScope托管bean? (假设所讨论的托管bean已经创建,但尚未销毁)

  • 我在Echo Studio 3上从事一个Java项目。我有一个显示Pdf文件的servlet。我使用一个按钮调用此servlet,该按钮使用以下代码打开一个新窗口: 我只允许单击此按钮的用户访问此servlet,但我不知道如何处理此问题。 任何想法?

  • 我一直在创建一个android应用程序。我设计了一个注册表。在这里,当人们单击signup按钮时,详细信息将添加到mysql表中(包含确认代码作为字段)并且确认代码最初被设置为NULL,然后调用servlet。这个servlet包含生成一个4位随机数并将其添加到特定条目的mysql表中的代码。然后servlet调用另一个类中的一个方法,该方法用代码向用户发送确认电子邮件。 现在,当我运行应用程序和

  • 问题内容: 我正在使用jQuery 1.4.2创建ajax应用,并且尝试使用get(),post()和ajax()方法本身。我的php服务返回: 在我的成功回调中,我尝试以json.status和json [0] [0]的身份访问,但它始终返回“ undefined”。我究竟做错了什么? 我已经搜索了好几天了。我该如何访问返回的数据?任何帮助,将不胜感激。 问题答案: 要访问该状态值,您需要: 这