您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从servlet访问数据

从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) {}
    }
}
Jave 2022/1/1 18:34:46 有488人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶