sql >> Database >  >> RDS >> Mysql

Omgaan met grote records in een Java EE-toepassing

Je kunt het beste niet sla de gegevens op enigerlei wijze op in het geheugen van Java, maar schrijf de verkregen gegevens gewoon onmiddellijk naar het antwoord wanneer de gegevens binnenkomen. U moet ook het MySQL JDBC-stuurprogramma configureren om de resultatenset rij voor rij te dienen door Statement#setFetchSize() volgens de MySQL JDBC-stuurprogrammadocumentatie , anders wordt het hele ding in het geheugen gecached.

Ervan uitgaande dat je bekend bent met Servlets, is hier een voorbeeld van een kick-off waarin hiermee rekening wordt gehouden:

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. Booleaanse velden indexeren

  2. django.db.utils.OperationalError:(2013, verbinding met MySQL-server verbroken bij 'handshake:initieel communicatiepakket lezen', systeemfout:0)

  3. Recursieve MySQL-query?

  4. Hoe een fout op te lossen die wordt veroorzaakt doordat libmysqlclient.15.dylib niet wordt geladen?