【问题标题】:Java JDBC issue, Row 1 doesn't contain data for all columnsJava JDBC 问题,第 1 行不包含所有列的数据
【发布时间】: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 不喜欢它或其他东西..

标签: java mysql sql jdbc


【解决方案1】:

当会话通过 JDBC 连接启动时,MySQL 设置为严格。我在命令行和 GUI 上测试了我的查询,两次查询都有效。只有在通过 JDBC 运行查询时,我才返回一个错误。根据 Timothy 在 MySQL 错误论坛上的说法:

一个可能的解决方法是关闭严格模式,无论是整个 服务器,用于特定会话或仅用于几个语句。为了 示例:

设置@old_sql_mode = @@sql_mode;设置 sql_mode = '';
-- 运行一些可能导致数据截断的语句 set sql_mode = @old_sql_mode;

我在运行任何查询之前执行了set sql_mode= '',并且错误停止了。

 stmt.execute("SET sql_mode = ''");

 for (int i = 0; i < loadinhcc.length; i++) {

      stmt.execute(loadinhcc[i]);
 }

其他信息

MySQL Documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2016-04-15
    相关资源
    最近更新 更多