【问题标题】:Returning a null array string in java在java中返回一个空数组字符串
【发布时间】:2011-11-06 12:33:23
【问题描述】:

我有一个 java 类,我正在执行一个查询并将查询结果分配给一个字符串数组,最后返回该数组。

一切正常。但是如果数据库值为空(不是整个数组),我想返回“无数据”。我该怎么办?

代码:

query="select `t1`,`t2`,`t3` from test";

                PreparedStatement pre = conn.prepareStatement(query);
                ResultSet res = pre.executeQuery();
                String val[][] = new String[res.getRow()][3];
           while (res.next()) {
                val[i][0] = res.getString(1);
                val[i][1] = res.getString(2);
                val[i][2] = res.getString(3);
                i++;
              }

                res.close();
                conn.close();
                pre.close();

                return (val);

(如果res.getString(2) 为空,我希望val[1][1] 为“无数据”)。

【问题讨论】:

  • 是的,我试过这样if(res.getString(1)!=null&&res.getString(1).equals("")){val[i][0] = res.getString(1);}else{val[i][0]="No Data";},但我收到org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "No Data"的错误
  • 您可能正在对No Data进行一些数字运算

标签: java arrays jsp return


【解决方案1】:

No Data 似乎是您显示的值多于逻辑值。

所以你应该决定一个特殊的值并以特殊的方式显示它。我们通常称之为哨兵值。

这个值可能是 null 或一个不能在你的数据库中的字符串。 (也许它在这里并不适用,因为数据库中的一切通常都是可能的)。

还要注意,使用异常而不是这个特殊值可能很有吸引力,但它实际上是一个非常糟糕的异常使用,主要是为了性能问题,因此它是一种尽可能避免的设计,除非这个值可能导致为您的客户课程解决问题。

【讨论】:

  • 同意 100% - 你不应该在你的模型中混合显示元素。
【解决方案2】:

像这样添加小的辅助方法:

public static String getValue(String value) {
  return getValue(value, "No Data");
}

public static String getValue(String value, String default) {
  return value == null ? default : value;
}

像这样使用它:

val[i][0] = getValue(res.getString(1));  // standard 
val[i][0] = getValue(res.getString(1), "NULL");  // with custom default message

【讨论】:

    【解决方案3】:

    试试这个方法

    val[i][0] = (res.getString(1)!=null & !res.getString(1).equals(""))?res.getString(1).equals(""):"No Data";
    
    val[i][1] = (res.getString(1)!=null & !res.getString(2).equals(""))?res.getString(3).equals(""):"No Data";
    
    val[i][2] = (res.getString(1)!=null & !res.getString(3).equals(""))?res.getString(3).equals(""):"No Data";
    

    使用唯一的“&”当您使用 && 首先检查条件时会发生什么,它将检查第一个,即 rs.getString(1)!=null,如果它为空,它将检查另一个条件,即rs.getString(1).equal("") 因此,如果您检查它并且它将为空,那么在第二种情况下,它将导致 NullPointerException 错误。

    如果你只使用一个 & 然后它会检查第一个条件是否为真,那么只有它去检查另一个条件,否则不。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2018-08-27
      • 2014-12-18
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2019-10-29
      相关资源
      最近更新 更多