【问题标题】:DAO layer takes only some parameters for creating objectDAO 层只需要一些参数来创建对象
【发布时间】:2018-09-03 11:12:51
【问题描述】:

我正在尝试将人员添加到具有 DAO 层的继承人的管理员人员,但它只需要一些参数。 人:

public class Person {

    protected String name;
    protected String username;
    protected String password;


    public Person() {

        this.name = "";
        this.username = "";
        this.password = "";
        }

    public Osoba( String name, String username, String password) {

        this.name = name;
        this.username = username;
        this.password = password;

    }
    public Person(Person original) {

        this.name = original.name;
        this.username = original.username;
        this.password = original.password;

    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", username="
                + username + ", password=" + password +"]";
    }

}

管理员

public class Admin extends Person  {

    private double salary;


public Administrator() {
    this.name = "";
    this.username = "";
    this.password = "";
    this.salary= 0;

}
public Admin(String name, String username, String password, double salary) {

    this.name = name;   
    this.username = username;
    this.password = password;
    this.salary = salary;

}
public Admin(Admin original) {
    super(original);
    this.name = original.name;
    this.username = original.username;
    this.salary = original.salary;
    this.salary = original.salary;
}


public int getSalary() {
    return salary;
}
public void setSalary(double salary) {
    salary = salary;
}

@Override
public String toString() {
    return "Administrator [salary=" + salary + "]";
}

}

用于创建新管理员的 DAO:

    public static int createAdmin(Admin d) {
    int status = 0;
    con = SQLite.dbConnector();
    try {
        PreparedStatement ps = con.prepareStatement("insert into admin values(?,?,?,?)");
        ps.setString(1, d.getName());
        ps.setString(2, d.getUsername());
        ps.setString(3, d.getPassword());
        ps.setString(4, d.getSalary());
        int rs = ps.executeUpdate();

    }catch(Exception e) {e.printStackTrace();}
    return status;
}    

在 DAO 上,我使用 SQLite 在数据库中插入数据,其他需要创建的对象(如 Book)正在使用此模式

partsGUI 用于插入数据:

    nameAdmin = new JTextField();
    nameAdmin.setColumns(10);
    korisnickoAdministratora.setBounds(625, 249, 114, 21);
    frame.getContentPane().add(nameAdmin);

    usernameAdmin = new JTextField();
    usernameAdmin.setColumns(10);
    usernameAdmin.setBounds(625, 312, 114, 21);
    frame.getContentPane().add(usernameAdmin);

    passwordAdmin = new JTextField();
    passwordAdmin.setColumns(10);
    passwordAdmin.setBounds(625, 279, 114, 21);
    frame.getContentPane().add(passwordAdmin);

    salaryAdmin = new JTextField();
    salaryAdmin.setColumns(10);
    salaryAdmin.setBounds(625, 344, 114, 21);
    frame.getContentPane().add(salaryAdministratora);

以及连接gui和dao的部分:

    JButton btnAddAdmin = new JButton("AddAdmin");
    btnAddAdmin.setBounds(545, 391, 192, 27);
    frame.getContentPane().add(btnAddAdmin);
    btnAddAdmin.addActionListener(new ActionListener() {


        public void actionPerformed(ActionEvent e) {
            try {

                double s = Double.parseDouble(salaryAdmin.getText());

                Admin d = new Admin(nameAdmin.getText(),usernameAdmin.getText(),passwordAdmin.getText(),s);
                System.out.println(d);
                AdminDAO.createAdmin(d);
                System.out.println(d);

            }catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }

    }
            );

现在的问题是,这让新管理员只使用了薪水参数,而 System.out.prinln(d) 只打印了这个:

Admin [salary=123.0]

【问题讨论】:

  • 您已经覆盖了toString 并且不调用 super 或不包括其他参数。所以显然那些不会被打印到控制台。
  • 使用super(name, username, password); 调用父构造函数,然后在Admin 类中调用this.salary = salary;。同样在 Person 类中,您有一个名为 Osoba 的构造函数,这是错误的,需要删除。
  • @Aris_Kortex 是的,修复它并且它可以工作:)
  • @M.Deinum 谢谢你,我已经为此苦苦挣扎了一段时间,它奏效了:)
  • @MilošĆurčić Imma 把它变成了答案。

标签: java user-interface model-view-controller crud dao


【解决方案1】:

您的Admin 构造函数未正确调用父构造函数。而不是这样做:

public Administrator() {
    this.name = "";
    this.username = "";
    this.password = "";
    this.salary= 0;

}
public Admin(String name, String username, String password, double salary) {
    this.name = name;   
    this.username = username;
    this.password = password;
  this.salary = salary;

}
public Admin(Admin original) {
    super(original);
    this.name = original.name;
    this.username = original.username;
    this.salary = original.salary;
    this.salary = original.salary;
}


// person

 public Person() {
    this.name = "";
    this.username = "";
    this.password = "";
}

public Osoba( String name, String username, String password) {
    this.name = name;
    this.username = username;
    this.password = password;
}

public Person(Person original) {
    this.name = original.name;
    this.username = original.username;
    this.password = original.password;
}

你应该这样做:

public Adminstrator() {
    super();
    this.salary = 0;
}

public Administrator(String name, String username, String password, double salary) {
    super(name, username, password);
    this.salary = salary;
}

public Adminstrator(Administrator original) {
    super(original);
    this.salary = salary;
}

还有这个代码是错误的,应该删除:

public Osoba( String name, String username, String password) {
    this.name = name;
    this.username = username;
    this.password = password;
}

最后我建议你好好阅读一下继承。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多