我有一个要求,即只能从本地主机访问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”。我究竟做错了什么? 我已经搜索了好几天了。我该如何访问返回的数据?任何帮助,将不胜感激。 问题答案: 要访问该状态值,您需要: 这