All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.fridujo.automocker.api.jdbc.DataSources Maven / Gradle / Ivy

The newest version!
package com.github.fridujo.automocker.api.jdbc;

import com.github.fridujo.automocker.utils.ThrowingConsumer;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public final class DataSources {

    private DataSources() {
    }

    public static void doInConnection(DataSource datasource, ThrowingConsumer task) {
        try (Connection c = datasource.getConnection()) {
            ThrowingConsumer.silent(task)
                .accept(c);
            c.commit();
        } catch (SQLException e) {
            throw new IllegalStateException(e);
        }
    }

    public static void populateTable(DataSource datasource, String tableName, List columns,
                                     List> values) {
        StringBuilder sql = new StringBuilder("INSERT INTO ");
        sql.append(tableName)
            .append(" (");
        sql.append(columns.stream()
            .map(String::toUpperCase)
            .collect(Collectors.joining(", ")));
        sql.append(") VALUES (");
        sql.append(IntStream.range(0, columns.size())
            .mapToObj(i -> "?")
            .collect(Collectors.joining(", ")));
        sql.append(")");
        doInConnection(datasource, c -> {
            try (PreparedStatement ps = c.prepareStatement(sql.toString())) {
                for (List line : values) {
                    int i = 1;
                    for (String value : line) {
                        ps.setString(i, value);
                        i++;
                    }
                    ps.addBatch();
                }
                ps.executeBatch();
            }
        });
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy