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

サーブレットからのデータへのアクセス

    まず、これにサーブレットを使用することはお勧めしません。正しいアプローチについては、aioobeとmdmaの回答を参照してください。しかし、他に選択肢が本当にない場合は、読み続けてください:

    すぐに応答にデータを書き込むだけです データが入ってくると。Javaのメモリにすべてを保存しないでください。つまり、基本的に:writer.write(resultSet.getString("col")) 。さらに、MySQL JDBCドライバーは、デフォルトで、ResultSet#next()に何かを与える前に、Javaのメモリーにすべてをキャッシュします。 。 Statement#setFetchSize() MySQLJDBCドライバーのドキュメントによる

    データを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) {}
        }
    }
    


    1. RAMを考慮したURLまたはハッシュのインデックス

    2. PDOステートメントでの列名のエスケープ

    3. ピアツーピア貸付プラットフォームデータモデル

    4. SQL Serverでポリモーフィックアソシエーションを実装するための最良の方法は何ですか?