2013年5月16日木曜日

DOMAを使ってDMLを実行

domaのデータマッピングツールを使っている。
truncateを実行したい場合、やる方法は見つからない。
DOMAのソースを読んで、SelectBuilder、INSERTBUILDER、UPDATEBUILDER、DELETEBUILDERを提供しているけど、truncate関連する物がない。

ネットで調べると、SEAZARのFAQにこういう回答がある。

CREATE/DROP/TRUNCATEなどのSQLを実行したい † Edit

exexuteQuery/executeUpdateで実行できるSQLなら、実行することができます。
その場合、メソッドの名前をexexuteQueryなら検索、executeUpdateなら挿入/更新/削除の命名規則にあわせてください。
ただし、オラクルは、DML以外をPreparedStatementで実行すると不安定になるので、S2Daoから実行するのは、やめたほうが良いと思います。
truncateなどは、Statementで実行してください。
#DataSourceから自前で処理するという意味です

 executeUpdateしか使えないそうだ。
 例があまりない。

自分を試した結果は以下のようだ。
public int truncate(String sql){
        StringBuffer sqls = new StringBuffer();
        sqls.append(sql);

        Connection connection = JdbcUtil.getConnection(config.getDataSource());
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(sqls.toString());
            try {
                int updatedRows = preparedStatement.executeUpdate();
            } catch (SQLException e) {
                異常処理
            } finally {
                JdbcUtil.close(preparedStatement, config
                        .getJdbcLogger());
            }
        }catch(SQLException e){
      異常処理
        } finally {
            JdbcUtil.close(connection, config.getJdbcLogger());
        }

        return 0;
    }

この中、configは、springからJDBC構成だ。

この関数でDMLも実行できると思う。
alter table tablename NOLOGGING
を使って試しました。


もっと調べて、実際にUpdateBuilderでDMLを実行できる。
そうしたら、上の原始的な方法が必要はない。

0 件のコメント: