Как я могу вставить данные из формы xhtml в базу данных Java в NetBeans? - PullRequest
0 голосов
/ 04 июня 2019

Я хочу ввести данные из формы в базу данных, используя netbeans и java DB.Моя проблема в том, что я не могу понять, как передать данные, которые пользователь вводит в форму, в базу данных.

Я попытался создать класс сущности и подключить его через него, но на основании того, что яПосле этого я получаю доступ ко всей базе данных, а не только к форме

РЕДАКТИРОВАТЬ: Это школьный проект, и я не обучался JDBC, по крайней мере пока.


<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Registration</title>
        <h:outputStylesheet name="css/jsfcrud.css"/>
        <h:outputStylesheet library="css" name="styles.css"/>
    </h:head>
    <h:body>
        <h3>Registration Page</h3>
        <h:form>
            <h:panelGrid columns="3"
                         columnClasses="rightalign,leftalign,leftali
                         gn">
                <h:outputLabel value="Category: " for="category"/>
                <h:selectOneMenu id="category" label="Category"
                                 value="#{registrationBean.
                                          category}" >
                    <f:selectItem itemLabel="Simple." itemValue="Simple"/>
                    <f:selectItem itemLabel="Suite." itemValue="Suite"/>
                    <f:selectItem itemLabel="Luxurious" itemValue="Luxurious"/>
                </h:selectOneMenu>
                <h:message for="category"/>
                <h:outputLabel value="People: " for="people"/>
                <h:selectOneMenu id="people" label="People"
                                 value="#{registrationBean.
                                          people}" >
                    <f:selectItem itemLabel="Mr." itemValue="1"/>
                    <f:selectItem itemLabel="Mrs." itemValue="2"/>
                    <f:selectItem itemLabel="Miss" itemValue="3"/>
                    <f:selectItem itemLabel="Miss" itemValue="4"/>
                </h:selectOneMenu>
                <h:message for="people"/>
                <h:outputLabel value="Duration:" for="duration"/>
                <h:inputText id="duration" label="Duration"
                             required="true"
                             value="#{registrationBean.duration}" />

                <h:message for="duration" />
                <h:panelGroup/>
                <h:commandButton id="register" value="Register"
                                 action="confirmation" />
            </h:panelGrid>
        </h:form>
        <br />
        <h:link outcome="/room/List" value="Show All Room Items"/>
    </h:body>

</html>

@Entity
public class Room implements Serializable {

    @Id
    @Basic(optional = false)
    @NotNull
    @Column(nullable = false)
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(nullable = false, length = 20)
    private String category;
    @Basic(optional = false)
    @NotNull
    @Column(nullable = false)
    private int people;
    @Basic(optional = false)
    @NotNull
    @Column(nullable = false)
    private int duration;

    private static final long serialVersionUID = 1L;
    @Id

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public Integer getPeople() {
        return people;
    }

    public void setPeople(Integer people) {
        this.people = people;
    }

    public Integer getDuration() {
        return duration;
    }

    public void setDuration(Integer duration) {
        this.duration = duration;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @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 Room)) {
            return false;
        }
        Room other = (Room) 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 "com.ensode.jsf.hotelreservations.Room[ id=" + id + " ]";
    }

    public Room() {
    }

    public Room(Integer id) {
        this.id = id;
    }

    public Room(Integer id, String category, int people, int duration) {
        this.id = id;
        this.category = category;
        this.people = people;
        this.duration = duration;
    }


}

public class RoomJpaController implements Serializable {

    public RoomJpaController(UserTransaction utx, EntityManagerFactory emf) {
        this.utx = utx;
        this.emf = emf;
    }
    private UserTransaction utx = null;
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Room room) throws RollbackFailureException, Exception {
        EntityManager em = null;
        try {
            utx.begin();
            em = getEntityManager();
            em.persist(room);
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception re) {
                throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Room room) throws NonexistentEntityException, RollbackFailureException, Exception {
        EntityManager em = null;
        try {
            utx.begin();
            em = getEntityManager();
            room = em.merge(room);
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception re) {
                throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re);
            }
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = room.getId();
                if (findRoom(id) == null) {
                    throw new NonexistentEntityException("The room with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Long id) throws NonexistentEntityException, RollbackFailureException, Exception {
        EntityManager em = null;
        try {
            utx.begin();
            em = getEntityManager();
            Room room;
            try {
                room = em.getReference(Room.class, id);
                room.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The room with id " + id + " no longer exists.", enfe);
            }
            em.remove(room);
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception re) {
                throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Room> findRoomEntities() {
        return findRoomEntities(true, -1, -1);
    }

    public List<Room> findRoomEntities(int maxResults, int firstResult) {
        return findRoomEntities(false, maxResults, firstResult);
    }

    private List<Room> findRoomEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Room.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Room findRoom(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Room.class, id);
        } finally {
            em.close();
        }
    }

    public int getRoomCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Room> rt = cq.from(Room.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}

Это persistance.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="HotelReservationsPU" transaction-type="JTA">
    <jta-data-source>java:app/roomintro</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>

В результате получается форма, которая во время работы не добавляет никаких данных в базу данных.

1 Ответ

0 голосов
/ 04 июня 2019

Уважаемый Гаррис Лоренцатос:

В обычном Java-проекте для хранения данных в базе данных вы используете Hibernate или другую среду, которая реализует спецификацию JPA.

Обычно вы будете использовать проект maven, и в файле pom.xml у вас есть некоторые спящие зависимости, такие как:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.core.version}</version>
    </dependency>

Обычно вы храните целые объекты

Код, который вы положили здесь:

    utx.begin();
    em = getEntityManager();
    em.persist(room);
    utx.commit(); 

Похоже, вы используете какую-то реализацию JPA. Но для того, чтобы понять вашу проблему, помогите увидеть файлы конфигурации, такие как pom.xml или hibernate.properties.

Вы можете загрузить свой код полностью, чтобы лучше понять. Я поделюсь с вами проектом, который я изучал в Hibernate и храню данные в базе данных MySQL https://github.com/marianocali/concesionario

Это простой пример проекта, использующего Hibernate, где вы можете увидеть код, аналогичный вашему проекту со всей конфигурацией.

Файл persistence.xml создает отображение между вашими классами Java и таблицами в базе данных.

Отредактировано: Ваш файл persistence.xml должен содержать информацию о подключении к базе данных: взгляните на два примера: https://github.com/marianocali/concesionario/blob/master/src/main/resources/META-INF/persistence.xml

https://gist.github.com/halyph/2990769

Вы должны добавить всю эту информацию в ваш файл.

Если это вам поможет, проголосуйте за ответ :) Если вам нужна дополнительная помощь, дайте мне знать
С уважением.
Мариано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...