Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
19 / 19 / 6
Регистрация: 09.12.2010
Сообщений: 140

Добавить запись в БД

12.04.2014, 11:42. Показов 1191. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется БД "auto" с таблицами "colors" (справочник цветов автомобилей) и "cars"(перечень автомобилей).
Таблицы связаны отношением один ко многим. В таблице cars поле colors_id является вторичным ключом.
Структура БД:
Кликните здесь для просмотра всего текста
MySQL
1
2
3
4
5
CREATE TABLE IF NOT EXISTS `auto`.`colors` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE IF NOT EXISTS `auto`.`cars` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `colors_id` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_cars_colors_idx` (`colors_id` ASC),
  CONSTRAINT `fk_cars_colors`
    FOREIGN KEY (`colors_id`)
    REFERENCES `auto`.`colors` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Классы сущностей:
Colors.java
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package entity;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
 
/**
 *
 * @author alexandr
 */
@Entity
@Table(name = "colors")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Colors.findAll", query = "SELECT c FROM Colors c"),
    @NamedQuery(name = "Colors.findById", query = "SELECT c FROM Colors c WHERE c.id = :id"),
    @NamedQuery(name = "Colors.findByName", query = "SELECT c FROM Colors c WHERE c.name = :name")})
public class Colors implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "name")
    private String name;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "colorsId")
    private Collection<Cars> carsCollection;
 
    public Colors() {
    }
 
    public Colors(Integer id) {
        this.id = id;
    }
 
    public Colors(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @XmlTransient
    public Collection<Cars> getCarsCollection() {
        return carsCollection;
    }
 
    public void setCarsCollection(Collection<Cars> carsCollection) {
        this.carsCollection = carsCollection;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Colors)) {
            return false;
        }
        Colors other = (Colors) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }
 
    @Override
    public String toString() {
        return "entity.Colors[ id=" + id + " ]";
    }
    
}

Cars.java
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
 
/**
 *
 * @author alexandr
 */
@Entity
@Table(name = "cars")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Cars.findAll", query = "SELECT c FROM Cars c"),
    @NamedQuery(name = "Cars.findById", query = "SELECT c FROM Cars c WHERE c.id = :id"),
    @NamedQuery(name = "Cars.findByName", query = "SELECT c FROM Cars c WHERE c.name = :name")})
public class Cars implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "name")
    private String name;
    @JoinColumn(name = "colors_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Colors colorsId;
 
    public Cars() {
    }
 
    public Cars(Integer id) {
        this.id = id;
    }
    
    public Cars(String name) {
        this.name = name;
    }
 
    public Cars(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Colors getColorsId() {
        return colorsId;
    }
 
    public void setColorsId(Colors colorsId) {
        this.colorsId = colorsId;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cars)) {
            return false;
        }
        Cars other = (Cars) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }
 
    @Override
    public String toString() {
        return "entity.Cars[ id=" + id + " ]";
    }
}

Сеансовые компоненты:
ColorsFacade.java
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package session;
import entity.Colors;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
 
/**
 *
 * @author alexandr
 */
@Stateless
public class ColorsFacade extends AbstractFacade<Colors> {
    @PersistenceContext(unitName = "WebApplication2PU")
    private EntityManager em;
 
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }
 
    public ColorsFacade() {
        super(Colors.class);
    }
    
    public void AddToBase(String str){
        Colors c = new Colors();
        c.setName(str);     
        em.persist(c);
    }
    
}

CarsFacade.java
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package session;
 
import entity.Cars;
import entity.Colors;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
 
/**
 *
 * @author alexandr
 */
@Stateless
public class CarsFacade extends AbstractFacade<Cars> {
    @PersistenceContext(unitName = "WebApplication2PU")
    private EntityManager em;
 
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }
 
    public CarsFacade() {
        super(Cars.class);
    }
    
    public void AddToBase(String name, Colors colorsId) {
        Colors c = em.find(Colors.class, colorsId);
        Cars car = new Cars();
        car.setName(name);
        car.setColorsId(c);
        em.persist(car);
    }
}

И контроллер:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package controller;
 
import entity.Colors;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import session.CarsFacade;
import session.ColorsFacade;
 
/**
 *
 * @author PuhovAG
 */
@WebServlet(name = "Controller", urlPatterns = {"", "/add", "/add_car"})
public class Controller extends HttpServlet {
 
    @EJB
    private CarsFacade carsFacade;
    @EJB
    private ColorsFacade colorsFacade;
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        getServletContext().setAttribute("cars", carsFacade.findAll());
        getServletContext().setAttribute("colors", colorsFacade.findAll());
 
        String userPath = request.getServletPath();
 
        if (userPath.equals("/add")) {
            String color = request.getParameter("color");
            colorsFacade.AddToBase(color);
        } else if (userPath.equals("/add_car")) {
            Colors c = new Colors();
            c.setName("white");
            carsFacade.AddToBase("mazda", c);
        }
 
        request.setAttribute("colors", colorsFacade.findAll());
        request.setAttribute("cars", carsFacade.findAll());
        String url = "/index.jsp";
        try {
            request.getRequestDispatcher(url).forward(request, response);
        } catch (IOException | ServletException ex) {
        }
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
    }
}


Так вот, добавляю запись в таблицу colors (метод AddToBase в классе ColorsFacade.java) - прекрасно все добавляется.
Подскажите, как модифицировать метод AddToBase в классе CarsFacade.java, а то у меня при добавлении записи вылазит ошибка javax.ejb.EJBException.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2014, 11:42
Ответы с готовыми решениями:

Четыре кнопки на форме: добавить запись, удалить запись, закрыть, найти запись
Private Sub КнопкаДобавитьЗапись_Click() On Error GoTo Err_КнопкаДобавитьЗапись_Click DoCmd.GoToRecord , , acNewRec ...

Составить программу с помощью которой можно добавить запись, удалить запись и распечатать дешевое издание.
program _file_LB7_Zeleniuk; type zurnal=record name:string; tiraz:integer; vartist:integer; end; var f:file of zurnal; ...

Нужно добавить кнопку Добавить запись
Подключил бд access уже заполненую. Нужно добавить кнопку, с помощью которой выводится еще одна форма, с помощью которых можно будет...

1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
13.04.2014, 11:15
Очень мало информации об ошибке. Навскидку надо в Cars добавить cascade = CascadeType.ALL
т.к при создании объекта car объект color не существует в БД и должен быть создан.

Так же я бы убрал ID в BaseEntity класс и наследовал бы от него.
В hassh, equals я бы не сравнивал id БД т.к часто бывает ситуация что надо сравнить объект из БД и объект от пользователя и equals вернет false т.к сравнивает id которого нет у второго объекта
так же не уверен зачем в классе Colors нужна ссылка на Cars т.к
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2014, 11:15
Помогаю со студенческими работами здесь

Код обработки событий на нажатие кнопок "Добавить запись в БД" и "Найти запись" в Access
Уважаемые программеры. Я - лузер. Очень нужна ваша помощь! Иначе пропаду. Помогите написать код обработки событий на нажатие кнопок...

Добавить запись в БД
Добрый день! Срочный вопрос, можно ли добавить запись в DataGridView (БД на MS Access) с TextBox-ов, как на Delphi через DBEdit?

БД.Добавить запись
База данных. Добавить запись в базу данных. вот структура: struct music { char name; char inst; char uch; ...

Добавить Запись
У меня ленточная форма. Внедрена кнопка &quot;Добавить Запись&quot;. Подскажите, пожалуйста, как убрать ленту добавления записи, ту что со...

Добавить запись в БД
Здравствуйте, подскажите как реализовать такую вещь, на форме есть 2 DBGrid, есть фильтр по первой таблице. Нужно добавить в выделенную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru