sql >> Databáze >  >> RDS >> Mysql

Zpracování velkých záznamů v aplikaci Java EE

Nejlepším řešením je ne data jakkoli uložit do paměti Javy, ale získaná data stačí ihned zapsat do odpovědi jak data přicházejí. Také je třeba nakonfigurovat ovladač MySQL JDBC tak, aby poskytoval sadu výsledků řádek po řádku pomocí Statement#setFetchSize() podle dokumentace ovladače MySQL JDBC , jinak to celé uloží do mezipaměti.

Za předpokladu, že znáte servlety, zde je příklad zahájení, který to vše bere v úvahu:

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. Špatný pohotovostní režim

  2. Vrátí GETUTCDATE() stejnou hodnotu, pokud se použije dvakrát ve stejném příkazu?

  3. mysql s hodnotami oddělenými čárkami

  4. Dotazování více databází najednou