在MySQL 8中,默认情况下禁用“ LOAD DATA LOCAL INFILE”语句。为了执行该语句,应同时启用服务器和客户端。以下MySQL文档描述了如何启用服务器和客户端:https : //dev.mysql.com/doc/refman/8.0/en/load-data-local.html
但是,没有记录如何针对JDBC客户端类型执行此操作。本文档中对客户端的任何建议都会产生错误“此MySQL版本不允许使用的命令”
首先在 Mysql8 中,默认“LOAD DATA LOCAL INFILE”是OFF,即关闭的一起。需要在服务端开启:
SET @@GLOBAL.local_infile=1;
在客户端命令行中使用,正如你所说,需要添加--local-infile=1
参数,但是在JDBC中,貌似没有这个限制。只是需要使用超级用户权限。同时,你需要注意,你的文件必须是MySQL服务系统所在机器中的文件,而不是本地客户机器中中文件(或者说并不是你应用部署系统的文件,除非你的应用和MySQL在同一个机器上)。
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/foobar", "root", "password");
Statement stmt = con.createStatement();
String sql =
"load data infile 'c:/temp/some_data.txt' \n" +
" replace \n" +
" into table prd \n" +
" columns terminated by '\\t' \n" +
" ignore 1 lines";
stmt.execute(sql);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。