【发布时间】:2013-11-09 01:31:57
【问题描述】:
我正在使用 Java JDBC 连接到 MySQL 数据库并将数据加载到表中。从 GUI 界面(我使用的是 Navicat)运行时,Load in data 语句工作正常。但是,当我采用相同的语句并将其放在一个文本文件中时,它不起作用,然后我使用以下代码读取该文件:
public String readFile(String path, Charset encoding) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return encoding.decode(ByteBuffer.wrap(encoded)).toString();
}
String hcccontent = readFile("resources/loadinhcc.txt", StandardCharsets.UTF_8);
String[] loadinhcc = hcccontent.split(regex);
for(int i = 0; i < loadinhcc.length; i++){
Statement stmt = conn.createStatement();
stmt.execute(loadinhcc[i]);
}
这很好用,因为我什至通过代码提取了我的 Java 程序解析的查询,将其复制到 navicat 并加载了所有数据。当我运行它并让程序尝试执行时,我收到以下错误“第 1 行不包含所有列的数据”
我在网上搜索过,我看到的最接近可能导致此问题的是 MySQL 严格模式。如果输入长于表中指定的长度,则 MySQL 不会加载,或者如果所有列都没有数据,则可能不会加载。但由于查询在 Navicat 中有效,因此这将导致此问题是没有意义的。 JDBC中是否有禁用严格模式的设置?还是我缺少其他东西?
【问题讨论】:
-
loadinhcc[i]包含什么内容? -
它的 load in 语句在程序上不起作用,但当我从 Navicat 运行它时工作正常。实际查询是: LOAD DATA INFILE '/path/test.txt' INTO TABLE hcc FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\n' 忽略 1 行;
-
您不能使用“sqlldr”命令通过 JDBC 加载数据。你必须使用 SQL ..
insert into table (col1, col2,...) values ( val1, val2..); -
我能够以相同的方式从另一个文本文件中加载到另一个表中,并使用加载数据 infile...这个正在破坏,因为其中一列似乎没有数据..通常,当我在 Navicat 中运行时,它会留下 null .. 但似乎 JDBC 不喜欢它或其他东西..