【问题标题】:How to allow LOAD DATA LOCAL INFILE on mysql-connector-java?如何在 mysql-connector-java 上允许 LOAD DATA LOCAL INFILE?
【发布时间】:2018-11-05 14:13:57
【问题描述】:

过去我经常使用mysql-connector-java 的v5。在LOAD DATA LOCAL INFILE期间,我通常设置连接允许从内存中加载数据如下:

com.mysql.jdbc.Connection con;
con.setAllowLoadLocalInfile(true);

后来它直接将文件设置为输入流用于数据库语句:

((com.mysql.jdbc.Statement) ps).setLocalInfileInputStream(new ByteArrayInputStream(...))

现在我正在迁移到连接器的 8.0.13 版本,该方法不再存在。而且,现在必须使用java.sql.Connection

我现在如何设置属性以允许在连接上显式加载数据?

尤其是java.sql.Statement 没有.setLocalInfileInputStream() 方法?

开发人员指南甚至提到了该方法,但没有说明如何访问它: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-implementation-notes.html

【问题讨论】:

标签: java mysql mysql-connector


【解决方案1】:

首选方法是在连接字符串中设置连接属性allowLoadLocalInfile=true,然后从转换为接口com.mysql.cj.jdbc.JdbcStatement的Statement对象调用setLocalInfileInputStream(InputStream stream)方法。

【讨论】:

【解决方案2】:

最后我切换到mariadb连接器,它是mysql的dropin替代品,但仍然有localinfile方法。

【讨论】:

    【解决方案3】:

    万一有人来看这个,班级需要搬家。现在至少在 8.0.15 中位于 com.mysql.cj.jdbc.StatementImpl

    【讨论】:

      【解决方案4】:

      这对我来说是有效的:

      jdbc:mysql://localhost:3306/tempDB?allowLoadLocalInfile=true
      

      适用于 Mysql8.0.18

      【讨论】:

        猜你喜欢
        • 2019-05-13
        • 2012-10-05
        • 2012-06-01
        • 2020-07-25
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多