【问题标题】:java mysql : table row as object containing stringjava mysql:表行作为包含字符串的对象
【发布时间】:2015-08-11 13:48:03
【问题描述】:

我在 java 中创建了一个仅包含数据成员的类 (Employee) 以匹配员工表的行。 String Name, int Age, double Salary 等等。

接下来,我创建一个固定维度为 50 的对象数组employee emp[]=new employee[50],并从 mySQL DB 中读取一些数据行并一一存储在该对象数组中。 然后这个对象数组由一个方法返回给调用方法。 接下来,我想像这样在while循环中处理这个对象数组

while(!emp[arraycounter].Name.equals(""))

我想,我正在检查对象数组中名称为空的第一个元素。

这会抛出一个NullPointerException。我错过了什么? 事实上,我希望能够将此对象数组的元素传递给方法,这些方法被声明为接受员工类的对象作为参数。

周六

【问题讨论】:

  • 添加完整(相关)代码和堆栈跟踪。
  • 也许你将 "" 与 null 进行比较?
  • 我认为您需要检查结果集下一项是否不为空,然后检查名称是否为空或空白!

标签: java mysql arrays string jdbc


【解决方案1】:

例如,如果您的数据库中只有 35 行,当您执行 emp[35] 时,员工为空。因此,当您执行 emp[35].Name 时,您将获得 NPE。 一些建议:

1/ 属性使用小写

2/更好的用户 "".equals(string) 比 string.equals("") 避免 NPE

3/只需使用列表而不是数组:

List<Employee> employees= new ArrayList<Employee>();
employees.add(The data extracted form db)

【讨论】:

  • 这没有回答问题。无论如何,问题中没有足够的信息,所以我不明白你为什么还要尝试回答。
  • 他问他为什么有一个 NPE。所以我解释了他为什么得到它。如果您没有足够的信息,那也不错。但感谢 -1....
  • 根据我们目前掌握的信息,您无法知道确切原因。您的回答中包含“例如”,说明您不确定。
  • 下一次,请在提供答案之前在 cmets 中要求澄清。 :) 这对 OP 更有帮助,对系统和版主来说更清晰,并导致更短的编辑/解决周期。感谢您的帮助!!
【解决方案2】:

首先,您必须包含完整的代码供我们分析。

其次,让我有点烦人 - 不要从外部访问属性。将它们设置为私有并创建 getName 和 setName 方法,等等。这是一个很好的做法。

现在,对于您的问题 - 您要么没有初始化对象,要么没有初始化其中的属性。也就是说,在员工构造函数中,您应该为所有属性设置默认值(例如Name="";),并且在读取数据之前,您应该初始化整个数组(例如for(i=0;i&lt;50;i++) emp[i]=new Employee();)。

您可能错过了两者之一。没有代码就不可能说是哪一个。

【讨论】:

  • 只是出于好奇:有人可以向我解释为什么我得到了两次反对票吗?我想知道我在回答中犯了什么错误。
  • 看来,答案你得到了反对票,而“添加完整(相关)代码和堆栈跟踪”你得到了赞成票..
  • 感谢@Erwan C. 的课程,但这对我来说似乎很教条。如果我有一个想法可以帮助其他用户,即使他的描述不完整,我应该避免仅仅因为他没有发布他的代码而提供帮助?我了解良好描述的价值以及完全理解问题的代码需要(因此我的第一段),但是痴迷真的有必要吗?
  • "如果我有一个想法可以帮助其他用户,即使他的描述不完整" --->是的,我完全同意,我也学得很辛苦,但我可以理解,如果每个人开始在没有信息的情况下给出答案,新来的人很难对它们进行排序
  • 嗯,谢谢你的课。学习社区的思维过程总是很重要的。今后我会尽量遵守标准。
猜你喜欢
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多