import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.io.IOException;
@Service
public class CsvImportService {
private final JdbcTemplate jdbcTemplate;
private final PlatformTransactionManager transactionManager;
@Autowired
public CsvImportService(JdbcTemplate jdbcTemplate, PlatformTransactionManager transactionManager) {
this.jdbcTemplate = jdbcTemplate;
this.transactionManager = transactionManager;
}
@Transactional
public int importCsvData(String tableName, String csvFilePath) {
try {
// トランザクションを開始
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
// CSVファイルからデータを読み込み、データベースに一括挿入
String copySql = "COPY " + tableName + " FROM '" + csvFilePath + "' WITH CSV HEADER";
jdbcTemplate.execute(copySql);
// トランザクションをコミット
transactionManager.commit(status);
return 0; // 正常終了
} catch (Exception e) {
// エラーが発生した場合、トランザクションをロールバック
transactionManager.rollback(status);
e.printStackTrace();
return 1; // 異常終了
// SQLExceptionに変換してスローし、トランザクションをロールバック
//throw new RuntimeException("データベースエラー", e);
}
} catch (IOException e) {
e.printStackTrace();
return 1; // 異常終了
}
}
}
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme