jdbc - java中,数据库返回一个空的结果集,并赋给变量去调用构造函数,生成的对象是null还是什么?
PHP中文网
PHP中文网 2017-04-18 09:34:25
0
3
514
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中文网

认证高级PHP讲师

모든 응답(3)
伊谢尔伦

데이터베이스가 비어 있으면 rs.next()는 false를 반환하고 while은 실행되지 않습니다.
모르는 경우에는 너무 많은 단어를 입력하고 여기에 질문을 게시하여 문제를 해결하는 것보다 빈 데이터 시트를 시험해 보는 것이 훨씬 빠르죠?

Ty80

@min 표면적인 문제는 해결되었지만, 질문하신 내용은 완전히 해결되지 않은 것 같습니다. 그래도 주제는 new 키워드가 하는 일:

에 주목해 보시기 바랍니다.
  1. 힙 메모리에 A

  2. 인스턴스를 저장할 공간을 만듭니다.
  3. A

  4. 생성자 호출
  5. 가상 머신 스택에서 주소를 열고 주소가 방금 열린 힙 공간을 가리킵니다

결국 A a = new A(...)은 스택 참조를 얻게 됩니다. JVM이 충돌하지 않는 한 이 스택 참조는 비어 있지 않습니다...

伊谢尔伦

1.rs.next가 잘못되었습니다. rs.hasNext()여야 하며 결과도 비어 있습니다.
2. null 및 0개의 매개변수가 전달되면 객체가 계속 생성됩니다. 생성하지 않을 이유가 없습니다. 아, 생각해 보세요. 왜 안 될까요?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿