gpt4 book ai didi

Java JDBC 问题,第 1 行不包含所有列的数据

转载 作者:行者123 更新时间:2023-11-29 02:27:05 25 4
gpt4 key购买 nike

我正在使用 Java JDBC 连接到 MySQL 数据库并将数据加载到表中。从 GUI 界面(我使用的是 Navicat)运行时,加载数据语句工作正常。但是,当我采用相同的语句并将其放入一个文本文件中时,它不起作用,然后我使用以下代码读取该文件:

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 中是否有禁用严格模式的设置?还是我还缺少其他东西?

最佳答案

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

A possible workaround is to turn off strict mode, either for the whole server, for a particular session, or for just a few statements. For example:

set @old_sql_mode = @@sql_mode; set sql_mode = '';
-- Run some statements which may result in data truncation 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

关于Java JDBC 问题,第 1 行不包含所有列的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19665943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com