上传加载本地数据

问题描述

我正在尝试使用带有 mybatis 的 MysqL 将 csv 文件上传到本地数据库。我创建了一个 MysqL 容器作为服务器并使用 datagrip 访问数据。我想用:

<insert id="batchInsertCsv" parameterType="string">
    LOAD DATA LOCAL INFILE #{filePath}
        INTO TABLE DATA
        COLUMNS TERMINATED BY ','
        IGnorE 1 LInes
</insert>

上传数据但我当前的错误是:加载本地数据被禁用;这必须在客户端和服务器端都启用。使用:

SET GLOBAL local_infile = true;

我已经在服务器端设置了 local_infile 并检查了它:

SHOW GLOBAL VARIABLES LIKE 'local_infile';

谁能提供帮助或建议?谢谢。

解决方法

LOAD DATA LOCAL INFILE 必须在服务器和客户端都允许,并且您已经完成了服务器部分。

由于 MyBatis 是建立在 JDBC API 之上的,您应该在 JDBC URL 中添加一个连接属性以在客户端启用该功能。例如

jdbc:mysql://127.0.0.1:3309/test?allowLoadLocalInfile=true

请注意,有几个与此功能相关的属性。

  • allowLoadLocalInfile
  • allowLoadLocalInfileInPath
  • allowUrlInLocalInfile

第一个是一个简单的 TRUE/FALSE 开关。
后两者允许您对上传的文件设置一些限制。

详情请参阅文档。
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-security.html