gpt4 book ai didi

java - 无法从结果集中读取列值;字符串索引超出范围 : 0

转载 作者:行者123 更新时间:2023-11-30 01:40:42 25 4
gpt4 key购买 nike

我正在使用 Hibernate SQL 查询从表(从 MySQL 数据库)读取数据。问题是,该表包含一个映射到 Hibernate 模型中的字符的列,有时该列是空的。我想这就是我的异常(exception)的来源。如何将 char 列映射到我的 hibernate 模型而不出现此错误?感谢您的回答!

<小时/>

谢谢您的回答!我的列不可为空(我正在使用 MySQL 并且该列不为空)那么我不这么认为

if (str == null) {

合适。

错误是:

15:30:35,289  INFO CharacterType:178 - could not read column value from result set: LSFUS11_20_; String index out of range: 0

这会导致以下异常:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:558)

我想我可以尝试你的解决方案,但是:

if (str == "") {

因为它不能为 null,所以它只是一个空字符串。

感谢您的代码,我会尝试一下!

最佳答案

根据您的问题,我假设您将其映射到原始字符。下次,请发布您收到的堆栈跟踪(您可以省略调用它的位置,如果您的项目太敏感,则只能包含 hibernate 内容)。

如果您确实映射到原始字符,并且该字符为 null,则会出现异常,因为原始字符不能分配 null。

此类将缓解这种情况,“null”字符将作为代表“0”的字符返回。您可以根据自己的喜好进行自定义:

import java.sql.ResultSet;
import java.sql.SQLException;

import org.hibernate.type.CharacterType;

public class NullCharacterType extends CharacterType {

/**
* Serializable ID generated by Eclipse
*/
private static final long serialVersionUID = 1L;

public NullCharacterType() {
super();
}

public Object get(final ResultSet rs, final String name)
throws SQLException {
final String str = rs.getString(name);
if (str == null || str.length() == 0) {
return new Character((char) 0);
} else {
return new Character(str.charAt(0));
}
}
}

要在 hibernate 映射中使用这种新类型,之前需要执行以下操作:

<property name="theChar" type="character">

现在,您只需指定类名作为您的类型:

<property name="theChar" type="yourpackage.NullCharacterType">

但是,最佳实践是不要使用基本类型进行数据库映射。如果可能的话,使用Character而不是char,因为这样就不会有null的问题(null可以分配给包装类型)。

关于java - 无法从结果集中读取列值;字符串索引超出范围 : 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161988/

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