J'étudie actuellement l'exemple de code de l'application Boilerplates Java DB Web Starter sur bluemix et j'ai quelques problèmes pour changer la table. Mon DB est prêt et fonctionne là. J'ai essayé de changer le code au lieu d'obtenir de la table de todolist, pour obtenir de ma table de pays. Voici l'image de la façon dont je l'ai changé le code:Modifier les tables de Boilerplates Java Exemple de DB Web Starter sur bluemix
http://i.imgur.com/MglCM6T.png
package example.jpa;
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.Table;
@Entity
@Table(name = "Country")
public class TODO {
@Id //primary key
@Column(name = "country_id")
@GeneratedValue(strategy = GenerationType.AUTO)
int id;
@Basic
@Column(name = "country_name")
String name;
public String getName() {
System.out.println(name);
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
System.out.println(id);
return id;
}
public void setId(int pk) {
id = pk;
}
@Override
public String toString() {
return String.format("{\"id\": \"%d\", \"name\": \"%s\"}", id, name);
}
}
package example.jpa;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.transaction.UserTransaction;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/Country")
public class TODOListResource {
private UserTransaction utx;
private EntityManager em;
public TODOListResource() {
utx = getUserTransaction();
em = getEm();
}
@POST
public Response create(@FormParam("name") String name) {
TODO todo = new TODO();
todo.setName(name);
try {
utx.begin();
em.persist(todo);
utx.commit();
return Response.ok(todo.toString()).build();
} catch (Exception e) {
e.printStackTrace();
return Response.status(javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR).build();
} finally {
try {
if (utx.getStatus() == javax.transaction.Status.STATUS_ACTIVE) {
utx.rollback();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@DELETE
public Response delete(@QueryParam("country_id") int id) {
try {
utx.begin();
TODO todo = em.find(TODO.class, id);
if (todo != null) {
em.remove(todo);
utx.commit();
return Response.ok().build();
} else {
return Response.status(javax.ws.rs.core.Response.Status.NOT_FOUND).build();
}
} catch (Exception e) {
e.printStackTrace();
return Response.status(javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR).build();
} finally {
try {
if (utx.getStatus() == javax.transaction.Status.STATUS_ACTIVE) {
utx.rollback();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@PUT
public Response update(@FormParam("country_id") int id,
@FormParam("name") String name) {
try {
utx.begin();
TODO todo = em.find(TODO.class, id);
if (todo != null) {
todo.setName(name);// TODO check if null
em.merge(todo);
utx.commit();
return Response.ok().build();
} else {
return Response.status(javax.ws.rs.core.Response.Status.NOT_FOUND).build();
}
} catch (Exception e) {
e.printStackTrace();
return Response.status(javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR).build();
} finally {
try {
if (utx.getStatus() == javax.transaction.Status.STATUS_ACTIVE) {
utx.rollback();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response get(@QueryParam("country_id") int id) {
if (id == 0) {
List<TODO> list = em.createQuery("SELECT country_id, country_name FROM country", TODO.class).getResultList();
if (list.size() == 0) {
list = em.createQuery("SELECT country_id, country_name FROM country", TODO.class).getResultList();
}
//TODO use JSON util like Gson to render objects and use REST Response Writer
String json = "{\"id\":\"all\", \"body\":" + list.toString() + "}";
return Response.ok(json).build();
}
TODO todo = null;
try {
utx.begin();
todo = em.find(TODO.class, id);
utx.commit();
} catch (Exception e) {
e.printStackTrace();
return Response.status(javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR).build();
} finally {
try {
if (utx.getStatus() == javax.transaction.Status.STATUS_ACTIVE) {
utx.rollback();
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (todo != null)
return Response.ok(todo.toString()).build();
else
return Response.status(javax.ws.rs.core.Response.Status.NOT_FOUND).build();
}
/*private void createSampleData() {
create("sample entry #1");
create("sample entry #2");
create("sample entry #3");
}*/
private UserTransaction getUserTransaction() {
InitialContext ic;
try {
ic = new InitialContext();
return (UserTransaction) ic.lookup("java:comp/UserTransaction");
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
private EntityManager getEm() {
InitialContext ic;
try {
ic = new InitialContext();
return (EntityManager) ic.lookup("java:comp/env/openjpa-todo/entitymanager");
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
}
Je ne pouvais pas trouver aussi là où elle est la création de la table TODO quand il n'existe pas dans ma db.
Merci
Pouvez-vous expliquer les problèmes que vous rencontrez? Je ne vois rien de manifestement mauvais avec vos changements, donc un message d'erreur serait probablement utile. – opiethehokie
C'est beaucoup mieux si vous ajoutez réellement le code lui-même plutôt que d'ajouter le code en tant qu'images. Personne ne va taper ce code. Vous devez le rendre facile pour les gens pour vous aider, d'où la recommandation de créer un [mcve] (http://stackoverflow.com/help/mcve) – kkuilla
Donc, j'ai édité ma question ajouter les codes. J'ai une table sur le nom de pays bluemix avec deux colonnes: country_id (int) et country_name (varchar). J'ai téléchargé l'exemple de code de démarrage web JavaDB et quand j'ai couru, il a créé la table todolist sur mon db. Ce que j'essaie de faire avec le code est de comprendre comment il interagit avec ma base de données, donc je voulais changer la table todolist à ma table de pays. J'ai fait ces modifications que j'ai montrées dans les deux classes et maintenant ça me donne une erreur. Je suis un débutant sur bluemix et j'essaye de créer une application avec java et db. Appréciez l'aide. :) – Daiane