简体   繁体   中英

How can I insert data from an xhtml form to a Java DB in netbeans?

I want to enter data from a form to a database using netbeans and java DB. My problem is that I cant figure out how to pass the data that the user enters in the form to the database.

I have tried creating an entity class and connect it through that but based on the guide that I am following I end up having access to the entire database rather than just the form

EDIT:This is a school project and I haven't been taught JDBC, at least yet.


<?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();
        }
    }

}

This is the 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>

The result is having a form that while it works, it doesn't insert any data in the database.

Dear Harrys Lorentzatos:

In a normal java project in order to store data in a database you use Hibernate or another framework that implement JPA specification.

Normally you will use maven project and in a pom.xml file you have some hibernate dependencies like this:

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

Normally you store entire objects

The code you put here:

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

Looks like you are using some JPA implementation. But in order to understand your problem would help to see the config files like pom.xml or hibernate.properties.

You can upload your code complete in order to understand better. Y share with you some project I did learning Hibernate and store data in a mysql database https://github.com/marianocali/concesionario

This is a simple example of a project using Hibernate where you can see similar code to your project with all configuration.

The file persistence.xml create the mapping between your java classes and tables in the database.

Edited: Your persistence.xml file has to have the information about database connection: take a look at this two examples: https://github.com/marianocali/concesionario/blob/master/src/main/resources/META-INF/persistence.xml

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

You must add the all this information in your file.

If this helps you, vote the answer :) If you need more help, let me know
Regards.
Mariano

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM