Как я могу клонировать решение.NET?

В принципе это не может быть сделано с DbUtils из коробки. Я избавился от QueryRunner и MapListHandler, так как обработчик создает ArrayList. Вместо того, чтобы основываться на pull, я сделал это на основе push, создав очень похожий MyQueryRunner, который принимает MyRowHandler, и вместо возврата коллекции просто перебирает ResultSet и вызывает мою функцию вывода.

Я уверен, что есть более элегантные способы сделать это и вернуть некоторый буфер строк, но это то, что мне нужно 80/20 и работает для больших наборов данных.

RowHandler

public class RowHandler {
    private static final RowProcessor ROW_PROCESSOR = new BasicRowProcessor();
    private JsonLOutputWriter writer;

    public RowHandler(JsonLOutputWriter writer) {
        this.writer = writer;
    }

    int handle(ResultSet rs) throws SQLException {
        AtomicInteger counter = new AtomicInteger();
        while (rs.next()) {
            writer.writeRow(this.handleRow(rs));
            counter.getAndIncrement();
        }
        return counter.intValue();
    }

    protected Map<String, Object> handleRow(ResultSet rs) throws SQLException {
        return this.ROW_PROCESSOR.toMap(rs);
    }

}

QueryHandler

class CustomQueryRunner extends AbstractQueryRunner {

    private final RowHandler rh;

    CustomQueryRunner(DataSource ds, StatementConfiguration stmtConfig, RowHandler rh) {
        super(ds, stmtConfig);
        this.rh = rh;
    }

    int query(String sql) throws SQLException {
        Connection conn = this.prepareConnection();
        return this.query(conn, true, sql);
    }

    private int query(Connection conn, boolean closeConn, String sql, Object... params)
            throws SQLException {
        if (conn == null) {
            throw new SQLException("Null connection");
        }
        PreparedStatement stmt = null;
        ResultSet rs = null;
        int count = 0;
        try {
            stmt = this.prepareStatement(conn, sql);
            this.fillStatement(stmt, params);
            rs = this.wrap(stmt.executeQuery());
            count = rh.handle(rs);
        } catch (SQLException e) {
            this.rethrow(e, sql, params);
        } finally {
            try {
                close(rs);
            } finally {
                close(stmt);
                if (closeConn) {
                    close(conn);
                }
            }
        }
        return count;
    }
}
12
задан Vertexwahn 4 March 2016 в 16:16
поделиться

4 ответа

Поскольку Вы уже узнали: Скопируйте .sln Файл и удостоверьтесь соответствие путей/гуидов.

Поскольку .sln text/plain просто используйте свой любимый язык сценариев для сценариев клона.

Возможно, это - хорошее время для изучения Хоста Сценария Python/Ruby/Perl/Windows

Решение MSDN (.sln) определение файла

2
ответ дан 2 December 2019 в 22:23
поделиться

Взгляд на Древовидного Хирурга на CodePlex, это создает дерево разработки для Вас.

1
ответ дан 2 December 2019 в 22:23
поделиться

Я полагаю, что Инструментарий Автоматизации Руководства позволяет Вам делать это, но не может быть "легким" путем.

Я имею ту же проблему как Вы и намереваюсь посмотреть на нее подробно "очень скоро теперь".

0
ответ дан 2 December 2019 в 22:23
поделиться

Может быть, вам стоит проверить проект с открытым исходным кодом Warmup . Краткое описание можно найти на http://devlicious.com/blogs/rob_reynolds/archive/2010/02/01/warmup-getting-started.aspx .

IMHO, преимущество подхода Warmup в том, что он может клонировать все дерево с решением непосредственно из SVN или GIT.

Примечание! Я не использовал его лично, но планирую попробовать в следующем проекте. Пожалуйста, оставьте комментарий, если вы его используете.

0
ответ дан 2 December 2019 в 22:23
поделиться