gpt4 book ai didi

java - preparedStatement.setString(1 ,"null"),被解释为 null 而不是字符串(在 preparedStatement.addBatch() 之后)

转载 作者:行者123 更新时间:2023-11-30 07:41:44 26 4
gpt4 key购买 nike

PreparedStatement setString 取一个“null”(就像 String a = "null"),在 .addBatch 之后它被转换成一个普通的 null(就像 String a = null)。

我不知道如何能够绕过这种误解,因为很多行在它们被全部添加为批处理后立即执行......(sql 语句是一个 INSERT INTO ...)(VarChar 不能为 null 但 String a = "null" 可以被表接受,如果它没有批量发送...整个程序由于来自服务器的错误消息而停止)

错误信息:将数据写入数据库时​​出错... org.netezza.error.NzSQLException:错误:第 17 列:字段不能包含空值

代码:

preparedStatement.setString(17, x); //currently x was recieved as "null"
preparedStatement.addBatch() //after other parameters were filled then this statement
preparedStatement.executeBatch(); //after the logs this statement is executed.

希望有一个快速解决办法

我使用了这个绕过,但认为可能有更好的绕过...(因为我无法更改数据库默认值或操作数据...)

if(helper.toLowerCase().equals("null"))
helper = (helper.equals("null") ? "null ":"NULL ");

preparedStatement.setString(17, helper);

最佳答案

请记住,我从未使用过 Netezza,也无法尝试任何东西。这是在 IBM Netezza 的官方文档中找到的信息集合。

如果我没看错的话,文本值“null”有一个显式转换以识别值的缺失... external table .原因很简单,外部表是一个平面文件,因此它可能将所有内容存储为不带分隔符的文本,但文件大小为分隔符。

Handle the absence of a value

In SQL, a record must include a value if a column is declared as not null. When a record contains no value for a column, the column is considered to be null. The system provides an explicit and implicit method for conveying nullness.
- The explicit method includes a specific token in the field instead of a value. By default, this token is the word “null” (not case-sensitive). You can use the nullValue option to change this token to any other 1 - 4 character alphabetic token. You can precede or follow an occurrence of the explicit null token in a non-string field with adjacent spaces. For the system to recognize an explicit null token in a string field, the token cannot have preceding or trailing adjacent spaces. The explicit null token method makes it impossible to express a string that consists of exactly the text of the null token.

然后,我们可以在The NullValue option中看到同样的想法

Specifies the string to use for the null value, with a maximum 4-byte UTF-8 string. The default is ‘NULL’.

您可以将此表的此选项替换为任何其他 String 但我相信这只会解决问题...

所以我的解决方案是,将表的 NullValue 设置为 ""(一个空格),然后在您的项目中修剪每个值,您将永远无法拥有"" 因为它将被修剪为 ""

关于java - preparedStatement.setString(1 ,"null"),被解释为 null 而不是字符串(在 preparedStatement.addBatch() 之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55744034/

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