Семейное древо с использованием базы данных Java и MySQL

0

Я создал программу Family Tree в Java, используя базу данных MySQL. Программа состоит в том, что пользователь вводит данные, такие как имя, имя отца, город, штат. Данные хранятся в базе данных. И тогда, если мы введем какое-либо имя, оно будет искать в базе данных и вернуть полное семейное древо.

Я создал для него логику, что, если какое-либо имя вводится пользователем, оно будет искать имя и распечатать данные, тогда оно назначит имя с именем отца и снова будет искать в базе данных до тех пор, пока не будет найдено никаких записей. Он работает нормально, но проблема возникает, когда есть общее имя двух членов. Как это решить, любой подход будет оценен.

Я прилагаю код для программы.

private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {                                          
    txtDisplay.setText("");
    str="";
    boolean b = false;
    name = txtName.getText();
    b = hasParent(name);
    if(b==true)
    getData();
    else
        JOptionPane.showMessageDialog(this, "No Records");

    b = hasParent(name);

    while(hasParent(name))
    {
        getData();

    }
    txtDisplay.setText(str); 

}                

public boolean hasParent(String name)
{
    boolean b = false;
    b = DBManager.searchParent(name);
    return b;
}

public void getData(){
    Family f = new Family();
    f = DBManager.getFamily(name);
    str = str+"Name: "+f.getName()+"\t|| "+"Father Name: "+f.getFatherName()+"\n\n";

    name = f.getFatherName();
}

Методы доступа к базе данных:

      public static boolean searchParent(String name){
         boolean flag = false;
         int count=0;
         try(Connection con = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);){
             PreparedStatement st = con.prepareStatement("select name from Family where Name=?");
             System.out.println(name);
             st.setString(1,name);
             ResultSet rs = st.executeQuery();
             if(rs.next()){
                 flag =true;
             }

             rs.close();
             st.close();
         }catch(Exception e){

         }
         return flag;
     }
  • 1
    Люди с одинаковыми именами - распространенная проблема в базах данных. Вы никогда не можете предполагать, что имя является уникальным идентификатором человека - вы должны сгенерировать свои собственные уникальные идентификаторы или (если возможно / желательно) использовать какой-либо номер, предоставленный государством, например, номер водительского удостоверения.
  • 1
    Поиск по имени не является хорошим способом, вам нужно изменить логику для идентификации ключа (здесь имя), и ключ должен быть уникальным, чтобы мы могли искать. Итак, мы создаем пару из пары «отец и ребенок» в качестве уникального ключа. используйте отца и ребенка в качестве ключа для поиска.
Теги:
data-structures

1 ответ

0

Используйте 2 таблицы.

Первый, содержащий данные пользователя: ID, имя, дата рождения, дата смерти (если применимо),...
где id - только автогенерированный уникальный номер для каждого пользователя.

Другая таблица содержит "родительские" отношения. Эта таблица содержит столбцы father и son, например. (или если вы также хотите добавить мать и братьев и сестер, у вас могут быть person otherPerson и type определяющие, является ли это отцом, матерью или родным братом). Эти столбцы имеют значение id этого конкретного человека в первой таблице.

Затем в вашем "пользовательском интерфейсе" вы просматриваете всех людей с таким именем, распечатываете их и выбираете правильного, если это применимо. Вы вставляете id выбранного человека вместе с id вновь вставленного человека в эту таблицу отношений.

  • 0
    Вторая таблица на самом деле не нужна, так как отношение 1 ко многим, а не ко многим. Вы можете добавить идентификатор отца в записи пользователя. Ни у одного пользователя не будет более одного отца.
  • 0
    Не более 1 биологического отца да. Но он менее гибок, если вы когда-нибудь захотите расширить его для полного семейного древа. Вот почему я также намекнул на мать и братьев и сестер. Если он только когда-либо хочет отслеживать связь биологического отца с сыном, тогда нужен только дополнительный столбец fatherID .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню