【问题标题】:Trouble setting a variable with class scope from the constructor - Java, MySQL从构造函数中设置具有类范围的变量时遇到问题 - Java,MySQL
【发布时间】:2014-07-21 09:50:53
【问题描述】:

我正在尝试使用构造函数设置具有类范围的变量,每当我从构造函数中打印出该变量时,该变量都会设置为正确的值,但每当我尝试在同一类中的另一个方法中使用该变量时值为空。如何在构造函数之外正确使用 firstNameTest 变量?

这是构造函数和调用方法:

public class Member extends javax.swing.JFrame {



DefaultTableModel rentalsTableModel;
String customerID;
String firstNameTest; //Variable declared with class scope.


public Member() {

    initComponents();
    rentalsTableModel = (DefaultTableModel)tblRentals.getModel();
}

Member(String firstName, String lastName, String phoneNumber, String email, String over18, String dateJoined, String dateExpired, String fines) throws SQLException {

    System.out.println(firstName); // Successfully prints value.
    firstNameTest = firstName;
    System.out.println(firstNameTest); // Successfully prints value.
}

...                                       

private void btnChangeCustomerActionPerformed(java.awt.event.ActionEvent evt) {                                                  

    customerID = JOptionPane.showInputDialog(null, "Enter Customer ID.");

    MemberDAO member = new MemberDAO();
    try {

        List membersDetails = member.getMembersDetails(customerID);
        System.out.println(firstNameTest); // Value is null.
        txtFullName.setText(firstNameTest);

    } catch (SQLException ex) {

        System.err.println(ex);
        System.out.println("Failed to get Details.");
        JOptionPane.showMessageDialog(null, "Failed to retrieve data.");
    }
} 

调用方法:

public List<Member> getMembersDetails(String ID) throws SQLException{

    List<Member> membersDetails = new ArrayList();

    String getMembershipDetails = "SELECT first_name, last_name, phone_number, email, over_18, date_joined, date_expire, fines FROM members"
            + " WHERE member_id = " + ID + ";";

    try {
        DBConnection mc = new DBConnection();
        dbConnection = mc.getConnection();
        statement = dbConnection.createStatement();

        ResultSet rs = statement.executeQuery(getMembershipDetails);

        while(rs.next()){
            String firstName = rs.getString("first_name");
            String lastName = rs.getString("last_name");
            String phoneNumber = rs.getString("phone_number");
            String email = rs.getString("email");
            String over18 = rs.getString("over_18");
            String dateJoined = rs.getString("date_joined");
            String dateExpired = rs.getString("date_expire");
            String fines = rs.getString("fines");

            System.out.println(firstName);
            System.out.println(dateExpired);

            Member m;
            m = new Member(firstName, lastName, phoneNumber, email, over18, dateJoined, dateExpired, fines);
            membersDetails.add(m);

            System.out.println(membersDetails.get(0));
        }    

    }  catch (SQLException ex){
        System.err.println(ex);
        System.out.println("Failed to get Membership Details.");
        return null;
    } finally{
        if (ps != null){
            ps.close();
        }
        if (dbConnection != null){
            dbConnection.close();
        }
    } return membersDetails;
}

【问题讨论】:

  • 这里有很多代码,但只有一部分是相关的——为什么需要这么多属性来演示问题?为什么需要数据库来演示问题?此外,您还没有真正展示您编写的代码的作用。如果没有一个简短而完整的程序清楚地说明问题,就很难为您提供帮助。
  • 这似乎缺少一些重要的代码。您有两个构造函数,一个公共无参数和一个带参数的包,但带参数的构造函数既不链接也不调用 initComponents() 之类的东西。
  • 你从哪里得到 null ?
  • 我为所有代码道歉,我在过滤和编辑它时遇到问题。 Ninad 我在 btnChangeCustomerActionPerformed(... 在这一行得到 null : System.out.println(firstNameTest); // 值为 null。

标签: java mysql variables constructor scope


【解决方案1】:

改变这一行 -

System.out.println(firstNameTest); // Value is null.

System.out.println(((Member)membersDetails.get(0)).firstNameTest); // Value is null.

【讨论】:

  • Ty 的建议,但是当我尝试这个时,IDE 说它找不到符号,有什么想法吗?
  • 未找到哪个符号 - membersDetails?
  • get(0) 之后的 firstNameTest。
  • 你是个传奇。多谢了。 +1
猜你喜欢
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多