开发者

Should we use insertRow() with acceptChanges()?

开发者 https://www.devze.com 2023-03-20 15:16 出处:网络
Here is a sample code in java: try { /* create connection */ Connection conn = DriverManager.getConnection(url, username, password);

Here is a sample code in 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();
}

Now my question is this: 1. Should I use insertRow()? or I should use acceptChanges() instead? or m开发者_Python百科aybe both? 2. where should I put acceptChanges() in this code?


You call acceptChanges() when you are ready to propagate the changes to the underlying data source. However, if you are doing a number of updates/inserts (for multiple rows) then you should call acceptChanges() after all updateRow() and insertRow() are done. The reason being when you invoke acceptChanges() you establish an actual connection to the database which can often be expensive. So calling it each time after each insertRow/updateRow for multiple rows is not efficient.

In your code I would put acceptChanges() after the while block ends. The reason is what I mentioned above - making the database connection only once after all updates have been done to cacheResult in the while block.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号