【问题标题】:How to get one student from an SQL server DB using Java?如何使用 Java 从 SQL Server 数据库中获取一名学生?
【发布时间】:2018-09-28 10:04:26
【问题描述】:

我已经尝试让这段代码工作了几个小时,需要一些帮助。我有一个数据库,其中包含一个名为“学生”的表。我正在尝试编写以下方法,该方法根据用户的输入选择一名学生(稍后将在 gui 中发生)。现在我只是在一个测试类中测试它。

我想在一个 system.out.print。我究竟做错了什么?

public Student getOneSpecificStudent(int studentID) throws SQLException {

        Connection con = null;
        PreparedStatement stm = null;

        try {
            con = DatabaseConnection.getConnection();
            stm = con.prepareStatement("SELECT * FROM Student WHERE studentID = ?");
            stm.setInt(1, studentID);

            ResultSet rs = stm.executeQuery();

            Student student = new Student();
            while (rs.next()) {
                return (new Student(studentID = rs.getInt("studentID"), rs.getString("studentSSN"), rs.getString("studentName"), rs.getString("studentAddress"), rs.getString("studentPhoneNumber")));

            }
            return student;
        } finally {
            DbUtils.close(con);
            DbUtils.close(stm);
        }
    }

我目前的问题是这个测试方法:

    try {
        dal.getOneSpecificStudent(2);
        System.out.println("Student is: " + student.getStudentSSN() + 
student.getStudentID() );
    } catch (SQLException e) {
        System.out.println("SQL exception" + e );
    }

返回空值。

【问题讨论】:

  • 在您的测试方法中,您不会将getOneSpecificStudent 的结果分配给student 变量。
  • 检查学生对象是否包含值,或者您只是使用新关键字创建。你能写出完整的测试方法吗?
  • 在测试方法中如何以及在哪里初始化学生对象?
  • 在您的选择语句中,该表称为学生。在您的介绍中,您说表名是学生。
  • “返回 null。” - 什么返回 null?

标签: java sql-server database


【解决方案1】:

这里有一些相当“奇怪”的代码:

    dal.getOneSpecificStudent(2);
    System.out.println("Student is: " + student.getStudentSSN() + 
                       student.getStudentID());

您正在尝试调用 student 变量上的方法...但这与前面的语句没有任何关系。

  1. getOneSpecificStudent(2) 调用返回一个值,但您将其丢弃。
  2. getOneSpecificStudent 方法主体中的student 变量是一个本地 变量。它与您打印的变量不同。

所以也许你的断言应该重新考虑 "Returns null" .....

【讨论】:

  • 是的,我正在初始化“Student student = new Student();”在我的测试文件中,这意味着我什么也没返回。一旦我将其更改为“Student student = dal.getOneSpecificStudent(2)”,我立即获得了我的价值观。非常感谢您的帮助!有时你真的对自己的错误视而不见。
【解决方案2】:

你应该这样做:

Student student = dal.getOneSpecificStudent(2);
System.out.println("Student is: " + student.getStudentSSN() + 
student.getStudentID() );

所以它会打印值。

【讨论】:

    【解决方案3】:

    那么你是得到null 值还是得到NullPointerException。如果你得到空值,那是因为你在Student student = new Student(); 中将你的学生对象初始化为空,因为你没有在构造函数中传递任何东西。学生对象为空意味着 getter 将返回空值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 2012-03-13
      相关资源
      最近更新 更多