搜尋

首頁  >  問答  >  主體

jdbc - java中,数据库返回一个空的结果集,并赋给变量去调用构造函数,生成的对象是null还是什么?

ResultSet rs= pstmt.executeQuery();//数据库返回一个结果集,现在假设select的是
                                     数据库中没有的数据,那么结果集为空
    while (rs.next())
    {
        String str = rs.getString("Name");//此时str应该是null?
        int id = rs.getInt("Id");     //id为0?
        A a= new A(id,str);  //调用构造函数(定义见第二段代码),那a是什么?是
                               null?此构造器还会被调用吗?a这个对象会生成吗?
public final class A   //这个是A类的定义,成员变量和构造函数
{
private int id;
private String name;

public A(int Id,String Word)
  {
    this.id = Id;
    this.name = Word;
  }
}

我现在项目中要通过a这个对象来判断数据库返回的是否为空集,请问该如何判断?由此引出了上述问题(具体问题可以看代码段的注释)

PHP中文网PHP中文网2811 天前522

全部回覆(3)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:36:25

    資料庫空集的話,rs.next()回傳false,while裡面不執行。
    話說不知道的話,連下空的數據表試一下也比打那麼多字在這裡發個問題解決問題要快速的多的吧?

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:36:25

    @min 表面問題已經解決了,不過我覺得你問的問題並沒有徹底解決,還是建議題主關註一下 new 關鍵字做的事情:

    1. 在堆記憶體開闢空間,以儲存 A 的實例

    2. 呼叫 A 的構造方法

    3. 在虛擬機器堆疊上面開闢位址,將位址指向剛剛開啟的堆疊空間

    最終 A a = new A(...) 得到就是一个栈引用,这个栈引用不会为空,除非你的 JVM 掛了...

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:36:25

    1.rs.next不對的,應該為rs.hasNext(),同樣結果也為空吧.
    2.null和0的參數傳遞進去,對象還是要生成的,沒有理由不生成的啊,你想想為什麼不呢?

    回覆
    0
  • 取消回覆