使用Spring Data JPA自定义存储库方法将数据从csv加载到mysql表

时间:2019-04-22 20:29:20

标签: mysql spring-boot spring-data-jpa

我已经创建了自定义存储库方法,以将数据从csv加载到mysql表。

我的代码:

@Repository
public class AppRepositoryImpl implements AppRepositoryCustom {

    @PersistenceContext
    EntityManager entityManager;

    @Override
    public void loadCsv() {

        StringBuilder builder = new StringBuilder("LOAD DATA LOCAL INFILE ");
        builder.append("'C:/test/app.csv'");
        builder.append(" INTO TABLE app FIELDS TERMINATED BY ',' ");
        builder.append(" ENCLOSED BY '\\\"'");
        builder.append(" LINES TERMINATED BY '\\n' IGNORE 1 LINES");
        builder.append(" (");
        builder.append("@col1,@col2,@col3");
        builder.append(") ");
        builder.append("SET ");
        builder.append(
                "app_name=NULLIF(IF( (@col1 REGEXP '\\\\r$' OR @col1 REGEXP '\\\\r\\\\n$' OR @col1 REGEXP '\\\\n$'), TRIM(TRAILING '\\\\n' FROM (TRIM(TRAILING '\\\\r\\\\n' FROM TRIM(TRAILING '\\\\r' FROM @col1) ) ) ),  @col1),''),\r\n"
                        + "app_date=NULLIF(IF( (@col2 REGEXP '\\\\r$' OR @col2 REGEXP '\\\\r\\\\n$' OR @col2 REGEXP '\\\\n$'), TRIM(TRAILING '\\\\n' FROM (TRIM(TRAILING '\\\\r\\\\n' FROM TRIM(TRAILING '\\\\r' FROM @col2) ) ) ),  @col2),''),\r\n"
                        + "app_desc=NULLIF(IF( (@col3 REGEXP '\\\\r$' OR @col3 REGEXP '\\\\r\\\\n$' OR @col3 REGEXP '\\\\n$'), TRIM(TRAILING '\\\\n' FROM (TRIM(TRAILING '\\\\r\\\\n' FROM TRIM(TRAILING '\\\\r' FROM @col3) ) ) ),  @col3),'')");

        try {
            entityManager.createNativeQuery(builder.toString()).getResultList();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

我收到以下异常:

2019-04-23 01:47:01.305  WARN 3764 --- [nio-7070-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: S1000
2019-04-23 01:47:01.305 ERROR 3764 --- [nio-7070-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : ResultSet is from UPDATE. No Data.
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query

我应该使用哪种JPA查询方法来修复运行此SQL?

1 个答案:

答案 0 :(得分:0)

当您尝试发出插入语句时,您的createNativeQuery(string).getResultList()可能是错误的来源。

改为使用createNativeQuery(string).executeUpdate()