Слой DAO принимает только некоторые параметры для создания объекта - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь добавить человека к администратору, который является неотъемлемым человеком со слоем 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 +"]";
    }

}

Администратор * * 1004

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);

и часть, которая соединяет графический интерфейс с дао:

    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]

1 Ответ

0 голосов
/ 03 сентября 2018

Ваши 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;
}

Наконец, я предлагаю вам прочесть о наследовании.

...