Java sql

Résolu
mmanas Messages postés 13 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 15 septembre 2010 - 14 août 2008 à 14:26
mounis2400 Messages postés 8 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 30 août 2008 - 29 août 2008 à 16:39
bonjour je suis un debutant ,
j'essaye de tester une methode  d'une classe java qui execute une requete sql pour cela je passe des donnée de teste en argument de cette methode . le probleme c'est que la valeur null pour une variable string n'est pas accepté mais considere comme String et alors n'est pas accepter parce qu'il depasse le nbr de caractere defini pour cette valeur.
ma question est comment  on passe une variable avec une valeur null?

voici ma requete:

requete= "insert into Produit(produitId, deviseId, familyProductId, tarificationId, classeId, " +
                "echeanceId, typeProduitid, optionId, grTypeProduit, pro_produitId, classMnemonic_, libelle, " +
                "echance, strike, callPut, exercice, prix, currency, pdSupprime, pdConserve, dateSuppression, " +
                "dateImport) " +
                "values('"+produitId+"', '"+deviseId+"', '"+familyProductId+"', '"+tarificationId+"', " +
                "'"+classeId+"', '"+echeanceId+"', '"+typeProduitId+"', '"+optionId+"', '"+grTypeProduit+"', " +
                "'"+pro_produitId+"', '"+classMnemonic_+"', '"+libelle+"', to_date('"+echance+"','yyyy-mm-dd'), " +
                ""+strike+", '"+callPut+"', '"+exercice+"', "+prix+", '"+currency+"', '"+pdSupprime+"', " +
                "'"+pdConserve+"',  CURRENT_TIMESTAMP,  to_date('"+dateImport+"','yyyy-mm-dd'))";

et voici l'appel de la methode:

produit.insertProduit("Pr4", "D1", "F", "Tar1", "Cls1", "Ec1", "OTC", "A", "GTP", null, null, "lib",
                Date.valueOf("2005-06-06"), 3.5, "C", "exercice", 50.3, "crcy", "N", "O", Date.valueOf("2007-07-07"));
ce code se transforme  en sql sous cette forme:

insert into Produit(produitId, deviseId, familyProductId, tarificationId, classeId, echeanceId, typeProduitid, optionId, grTypeProduit, pro_produitId, classMnemonic_, libelle, echance, strike, callPut, exercice, prix, currency, pdSupprime, pdConserve, dateSuppression, dateImport) values('Pr4', 'D1', 'F', 'Tar1', 'Cls1', 'Ec1', 'OTC', 'A', 'GTP', 'null', 'null', 'lib', to_date('2005-06-06','yyyy-mm-dd'), 3.5, 'C', 'exercice', 50.3, 'crcy', 'N', 'O',  CURRENT_TIMESTAMP,  to_date('2007-07-07','yyyy-mm-dd'))

j'ai d'autre questions mais j'attends votre réponse dabord sur celle ci .
merci

5 réponses

indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
14 août 2008 à 15:44
Salut
cela semble normal, puisque tu mets manuellement des quotes entre les variables. Du coup, si ta valeur est null, tu auras une chaine de caractères.

Pour ce faire, il faudrait peut-être passer par une condition ternaire à chauqe variable suceptiable d'être null, du genre:

((maVariable == null) ? null : "'" + maVariable + "'")

Voili voilà

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
3
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
16 août 2008 à 00:11
Pourquoi ne te créé tu pas une classe Produit .

tu pourrais passer directement ton objet produit dans ta fonction ( ca ferait , à mon avis , plus propre que toutes tes chaines )
et dans ta fonction tu pourrais tester plus facilement si c'est null ou pas , vu que tu le creer plus haut

public void insertProduit ( p Produit )
{

...
et après tu reprends le système décrit par [auteur/INDIANAJULES/242730.aspx indiana_jules]
 
}
3
mmanas Messages postés 13 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 15 septembre 2010
18 août 2008 à 11:20
bonjour, merci pour vos réponses, mais comme je vous ai expliqué, je suis débutant et je n'ai pas compris vos propositions, merci de reformuler et si possible en reprenant mon code.
cordialement.
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
18 août 2008 à 11:59
Est ce que tu connais au moins la POO ?
Sinon avant toute chose , essaye de comprendre au moins la base ...

Dans ta BDD , tu as une Table Produit surement , non ?
Eh ben tu te cree une classe en Java reprenant les memes infos que ta Table produit

ex :

dans la BDD , un produit est identifié par un ID(clé primaire )  et est caractérisé par un nom et un poids (c'est un exemple)

public class Produit
{
    private int ID; // clé primaire , à utiliser seulement si tu n'utilise pas la auto-increment dans ta BDD
    private String nom;
    private int poids;

    public Produit (int ID,String nom , int poids )
    {
         this.ID = ID;
         this.nom = nom;
         this.poids = poids;
     }

    // et ici tu te fais tes gettors / settors
   //j'en mets que 1 je suis fainéant
  public void setNom ( String nom)
  {
      this.nom = nom;
   }
 
 public String getNom()
{
   return this.nom;
}

}

Maintenat que tu a ta classe produit tu peux faire Un truc comme

controller.addProduit ( model.Produit p) ;

Ainsi tu crée ton produit dans ta vue (ComboBox , TextField ... ) tu l'envoi au controller et apres le model traite tt cas pour l'inserer dans ta Table .

Et avant de l'inserer dans ta Table tu peux faire un truc du genre :

public boolean addProduit ( model.Produit p )
{
  String maRequeteSQL ="insert into Produit("+p.getNom+ ... ")" ;
  //Et ici si tu a cree ton object Produit et que tu a mis null dans ton nom , et ben ca mettra bien null dans ta BDD ...
 
    
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mounis2400 Messages postés 8 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 30 août 2008
29 août 2008 à 16:39
c est une méthode qui robuste est efficace d'ailler c est la logique que utilise hibernate
n ayont moin il y a plus simple c est d 'utiliser les preparedStatement et voici un exemple :
 String queryString = "insert into TOTO( TITI , TATA ) values( ? ,?)";
PreparedStatement preparedStatement = cx.prepareStatement(queryString);
preparedStatement.setObject(1, val1);
preparedStatement.setObject(2, val2);
preparedStatement.executeUpdate();

je suis là pour aider et faire connaissance avec les meilleurs.
0
Rejoignez-nous