Форум

Data.BG Форуми: Проблем с въвеждането на данни в JDBC - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Проблем с въвеждането на данни в JDBC

#1
Потребителят е неактивен   Eyzebio 

  • Група: Потребители
  • Мнения: 49
  • Регистриран: 25-July 09
  • Репутация: 2
Проблемът се състои в това, че при стартиране на програмата два пъти се въвеждат данните в таблицата employee.
Връзките, които съм направил са една от address към employee и една от workplace към employee.
Някой може ли да ми помогне къде бъркам?
Благодаря.







public class Employee {
private String firstName;
private String lastName;
private double salary;

public Employee() {

}

public Employee(String firstName, String lastName, double salary) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.salary = salary;
}

public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}

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


public class Address {
private String city;
private String neighborhood;
private String buildingNumber;
private Employee employee;

public Address(String city, String neighborhood, String buildingNumber, Employee employee) {
super();
this.city = city;
this.neighborhood = neighborhood;
this.buildingNumber = buildingNumber;
this.employee = employee;
}

public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}

public String getNeighborhood() {
return neighborhood;
}
public void setNeighborhood(String neighborhood) {
this.neighborhood = neighborhood;
}

public String getBuildingNumber() {
return buildingNumber;
}
public void setBuildingNumber(String buildingNumber) {
this.buildingNumber = buildingNumber;
}

public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}


public class WorkPlace {
private String placeOfWork;
private String jobOccupation;
private int hoursPerWeek;
private Employee employee;

public WorkPlace(String placeOfWork, String jobOccupation, int hoursPerWeek, Employee employee) {
super();
this.placeOfWork = placeOfWork;
this.jobOccupation = jobOccupation;
this.hoursPerWeek = hoursPerWeek;
this.employee = employee;
}

public String getPlaceOfWork() {
return placeOfWork;
}
public void setPlaceOfWork(String placeOfWork) {
this.placeOfWork = placeOfWork;
}

public String getJobOccupation() {
return jobOccupation;
}
public void setJobOccupation(String jobOccupation) {
this.jobOccupation = jobOccupation;
}

public int getHoursPerWeek() {
return hoursPerWeek;
}
public void setHoursPerWeek(int hoursPerWeek) {
this.hoursPerWeek = hoursPerWeek;
}

public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class MySqlDataBase {
private final String DB_CONN_STRING;
private final String DB_USERNAME;
private final String DB_PASSWORD;

public MySqlDataBase(String dB_CONN_STRING, String dB_USERNAME, String dB_PASSWORD) {
super();
DB_CONN_STRING = dB_CONN_STRING;
DB_USERNAME = dB_USERNAME;
DB_PASSWORD = dB_PASSWORD;
}

public void insertAddress(Address address) throws SQLException {
int employeeId = insertEmployee(address.getEmployee());
try(Connection connection = DriverManager.getConnection(DB_CONN_STRING, DB_USERNAME, DB_PASSWORD)) {
PreparedStatement preparedStatement =
connection.prepareStatement("INSERT INTO db_repository.address(city, neighborhood, building_number, employee_id)"
+ "VALUES(?, ?, ?, ?)");
preparedStatement.setString(1, address.getCity());
preparedStatement.setString(2, address.getNeighborhood());
preparedStatement.setString(3, address.getBuildingNumber());
preparedStatement.setInt(4, employeeId);
preparedStatement.execute();
}
}

public void insertWorkPlace(WorkPlace workPlace) throws SQLException {
int employeeInfoId = insertEmployee(workPlace.getEmployee());
try(Connection connection = DriverManager.getConnection(DB_CONN_STRING, DB_USERNAME, DB_PASSWORD)) {
PreparedStatement preparedStatement =
connection.prepareStatement("INSERT INTO db_repository.workplace(place_of_work, job_occupation, hours_per_week, employee_info_id)"
+ "VALUES(?, ?, ?, ?)");
preparedStatement.setString(1, workPlace.getPlaceOfWork());
preparedStatement.setString(2, workPlace.getJobOccupation());
preparedStatement.setInt(3, workPlace.getHoursPerWeek());
preparedStatement.setInt(4, employeeInfoId);
preparedStatement.execute();
}
}

public int insertEmployee(Employee employee) throws SQLException {
try(Connection connection = DriverManager.getConnection(DB_CONN_STRING, DB_USERNAME, DB_PASSWORD)) {
PreparedStatement preparedStatement =
connection.prepareStatement("INSERT INTO db_repository.employee(first_name, last_name, salary)"
+ "VALUES(?, ?, ?)");
preparedStatement.setString(1, employee.getFirstName());
preparedStatement.setString(2, employee.getLastName());
preparedStatement.setDouble(3, employee.getSalary());
preparedStatement.execute();
try(ResultSet resultSet = preparedStatement.executeQuery("SELECT LAST_INSERT_ID();")) {
resultSet.next();
return resultSet.getInt(1);
}
}
}
}

import java.sql.SQLException;

public class DataBaseManagement {
private static final String DB_CONN_STRING = "jdbc:mysql://localhost:3306/db_repository";
private static final String DB_USERNAME = "root";
private static final String DB_PASSWORD = "sofiyabulgaria1989";

public static void main(String[] args) throws SQLException {
MySqlDataBase mySqlDataBase = new MySqlDataBase(DB_CONN_STRING, DB_USERNAME, DB_PASSWORD);
Employee employee = new Employee("Ivan", "Ivanov", 6666);
mySqlDataBase.insertAddress(new Address("Sofia", "Drujba", "028", employee));
mySqlDataBase.insertWorkPlace(new WorkPlace("", "", 40, employee));
}
}

Мнението беше редактирано от Eyzebio: 19.07.17 - 19:24

0

#2
Потребителят е неактивен   brigadier 

  • Група: Потребители
  • Мнения: 1101
  • Регистриран: 25-December 05
  • Репутация: 247
С mysql много отдавна не съм работил , обаче тук основната конструкция е погрешна. Човекът не е елемент на адреса / работното място, а обратно. На един адрес може да живеят няколко човека (връзка one to many), а на работното място със сигурност.
Таблицата в базата данни се прави да отговаря на определен обект. Ако един обект съдържа друг обект, при въвеждането и изваждането му от таблицата той трябва да се сериализира / десериализира със setObject - http://www.java2s.co...SQLdatabase.htm (примерът е от стария стил JDBC със class.forName и не знам на практика колко стабилно работи)
Друг вариант е обектът да се обърне в JsonObject и да се вкара в таблицата като String

В случая Employee няма unique елемент за primary key. Аз бих го направил, като в Employee (прочее това super() вътре и във Workplace е излишно и не прави нищо) се добави поле int или long "id" (може да се зададе като primary key autoincrement) , във Address и Workplace Employee се заменя със employeeid (за Workplace даже логично би трябвало да е List от id на служители , с което пак стигаме до нов обект). После при нужда Employee се вади по id след ново запитване към таблицата. Още по- добре е id да се дефинира като foreign key в другите таблици.
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login