Java sql [Résolu]

Messages postés
13
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
15 septembre 2010
- - Dernière réponse : 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
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
23 décembre 2008
18
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de indiana_jules
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
3
Merci
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]
 
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Nicolas___
Messages postés
13
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
15 septembre 2010
0
Merci
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.
Commenter la réponse de mmanas
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
0
Merci
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 ...
 
    
}
Commenter la réponse de Nicolas___
Messages postés
8
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
30 août 2008
0
Merci
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.
Commenter la réponse de mounis2400