Должны ли мы использовать insertRow () с acceptChanges ()? - PullRequest
1 голос
/ 13 июля 2011

Вот пример кода в Java:

    try {
        /* create connection */
        Connection conn = DriverManager.getConnection(url, username, password);
        Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

        /* create a CachedRowSet */
        CachedRowSet cachedResult = new com.sun.rowset.CachedRowSetImpl();

        /* set connection information */
        cachedResult.setUrl(url);
        cachedResult.setUsername(username);
        cachedResult.setPassword(password);

        ResultSet result = stmt.executeQuery("SELECT * FROM tbl");

        /* populate CachedRowSet */ 
        cachedResult.populate(result);

        /* close connection */
        result.close();
        stmt.close();
        conn.close();

        /* now we edit CachedRowSet */
        while (cachedResult.next()) {
            if (cachedResult.getInt("id") == 12) {
                cachedResult.moveToInsertRow();

                /* use some updateXXX() functions */

                cachedResult.insertRow();
                cachedResult.moveToCurrentRow();
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
}

Теперь мой вопрос таков: 1. Должен ли я использовать insertRow()?или я должен использовать acceptChanges() вместо этого?или может и то и другое?2. где я должен поставить acceptChanges() в этом коде?

1 Ответ

2 голосов
/ 13 июля 2011

Вы звоните acceptChanges(), когда будете готовы распространить изменения на базовый источник данных.Тем не менее, если вы выполняете несколько обновлений / вставок (для нескольких строк), вам следует вызвать acceptChanges() после того, как все updateRow() и insertRow() завершены.Причина в том, что когда вы вызываете acceptChanges(), вы устанавливаете фактическое соединение с базой данных, которое часто может быть дорогим.Поэтому вызывать его каждый раз после каждого insertRow / updateRow для нескольких строк неэффективно.

В вашем коде я бы поставил acceptChanges() после окончания блока while.Причина в том, что я упомянул выше - установление соединения с базой данных только один раз после всех обновлений для cacheResult в блоке while.

...