sql >> データベース >  >> RDS >> Mysql

JavaEEアプリケーションでの大きなレコードの処理

    あなたの最善の策はしないことです 何らかの方法でデータをJavaのメモリに保存しますが、取得したデータを応答にすぐに書き込むだけです。 また、 Statement#setFetchSize() MySQLJDBCドライバーのドキュメントによる 、それ以外の場合は、すべてがメモリにキャッシュされます。

    サーブレットに精通していると仮定して、これをすべて考慮したキックオフの例を次に示します。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain");
        response.setHeader("Content-Disposition", "attachment;filename=numbers.txt"); // Force download popup.
    
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        Writer 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 number FROM phonenumbers");
    
            while (resultSet.next()) {
                writer.write(resultSet.getString("number"));
                if (!resultSet.isLast()) {
                    writer.write(",");
                }
            }
        } 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) {}
        }
    }
    


    1. SQLServerの日時とタイムスタンプの違いは?

    2. 最も一般的なPostgreSQLの障害シナリオ

    3. MySqlSELECTAS-すべてのフィールド名を追加します

    4. ORA-01017Oracleのエラー解決のヒント