2

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()代わりに使用する必要がありますか?または多分両方?acceptChanges()2.このコードはどこに入れるべきですか?

4

1 に答える 1

3

acceptChanges()基になるデータソースに変更を伝播する準備ができたら、呼び出します。ただし、(複数の行に対して)多数の更新/挿入を実行している場合はacceptChanges()、結局呼び出して実行する必要がupdateRow()ありinsertRow()ます。その理由は、呼び出すときacceptChanges()にデータベースへの実際の接続を確立するためです。これは多くの場合、コストがかかる可能性があります。したがって、複数の行に対して各insertRow / updateRowの後に毎回呼び出すのは、効率的ではありません。

あなたのコードではacceptChanges()、whileブロックが終了した後に配置します。その理由は、私が上で述べたことです。whileブロックのcacheResultに対してすべての更新が行われた後、データベース接続を1回だけ行います。

于 2011-07-13T19:57:05.900 に答える