Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Dubbio composizione PreparedStatement

    Salve a tutti, volevo chiedervi un'opinione riguardo ad un dubbio che m'è sorto.

    Devo creare una preparedStatement e "popolarla" in base ai parametri che sono presenti nel metodo..mi spiego con un esempio.

    codice:
    public static Vector getStudenti(nome, cognome, eta)
    {
           query="Select * from studenti where codice=%";
           if(nome!=null && cognome!=null)
                query=query+" and nome=? and cognome=?";
           if(eta!=null)
                query=query+" and eta=?";
           con.prepareStatement(query);
           ...   
    }
    ecco a questo punto devo effetuare i vari setString(posizione, valore), rifacendo tutti gli IF. E' possibile in qualche modo fare in modo di fare la composizione della query e la setString insieme nello stesso IF (per evitare di ripetere tutte le condizioni e avere problemi delle posizioni)? attendo illuminazioni ...grazie

    Edit: corretto le imperfezioni segnalate...avevo scritto direttamente il codice nella finestra del forum...con tutti i problemi del caso

  2. #2
    Un ciclo??

    Ma non mancano alcune cose come la where... e poi che è it?? non dovrebbe essere if ?

  3. #3
    Ho sistemato il codice del primo post...in ogni caso che intendi x fare un ciclo? il problema mio è che il metodo prepareStatement sono costretto a farlo dopo che ho completato la query.......e dunque devo prima compormi tutta la query e poi popolare tutti i campi. Quello che vorrei io è invece popolare i campi mano mano che aggiungo un pezzo di query...non so se sono stato chiaro...

  4. #4
    Allora vediamo se posso aiutarti,il metodo con.prepareStatement(query) dovrebbe precompilare una query... vero? Tu devi eseguirla questa query? Però prima la vuoi riempire con tutte le condizioni??

  5. #5
    Si....vorrei fare una cosa del genere:

    query=query+" altra condizione con un campo da definire ("?")"
    stmt.setString(1, VALORE) .......da fare subito e non dopo che ho finito di fare tutta la composizione

  6. #6
    Ma non la puoi eseguire subito?
    Tu vuoi eseguire subito la query?
    Cioè

    Select * from studenti where codice=% and nome=? and cognome=? and eta=? ;

    Esegui!

    Select * from studenti where codice=% and nome=? and cognome=? and eta=? ;

    Esegui!

    na cosa del genere?? :master:

    Oppure?? Non voglio farti perdere tempo ma spero di aiutarti...

    Dimmi tu

  7. #7
    Il metodo deve comporre la query in base ai parametri che ci sono.
    Se ci sono nome e cognome deve comporre:

    Select * from studenti where codice=% and nome=? and cognome=? ;

    se c'è l'età deve comporre:

    Select * from studenti where codice=% and eta=? ;

    se ci sono nome e cognome e c'è l'età deve comporre:

    Select * from studenti where codice=% and nome=? and cognome=? and eta=? ;

    E riempire i campi.........ma ora che mi viene in mente.....potrei cmq comporre la query completa...e poi in base al fatto che sia presente o meno un parametro, scrivere % oppure il valore nella condizione

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Dubbio composizione PreparedStatement

    Originariamente inviato da giaomnitel1
    E' possibile in qualche modo fare in modo di fare la composizione della query e la setString insieme nello stesso IF (per evitare di ripetere tutte le condizioni e avere problemi delle posizioni)?
    Puoi fare una cosa del genere:

    codice:
    StringBuffer sb = new StringBuffer ("Select * from ......");
    
    if (nome!=null && cognome!=null)
        sb.append (" and nome=? and cognome=?");
    if (eta!=null)
        sb.append (" and eta=?");
    
    // ... crea il PreparedStatement ...
    
    int indice = 1;
    
    if (nome!=null && cognome!=null)
    {
        prepStat.setString (indice++, nome);
        prepStat.setString (indice++, cognome);
    }
    
    if (eta!=null)
        prepStat.setString (indice++, eta);
    Non ti elimina il problema dei doppi test ma almeno non hai problemi per gli indici (fintanto che fai gli stessi test nella stessa sequenza).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Ok... prova così
    fammi sapere

  10. #10

    Re: Re: Dubbio composizione PreparedStatement

    Originariamente inviato da andbin
    Puoi fare una cosa del genere:

    codice:
    StringBuffer sb = new StringBuffer ("Select * from ......");
    
    if (nome!=null && cognome!=null)
        sb.append (" and nome=? and cognome=?");
    if (eta!=null)
        sb.append (" and eta=?");
    
    // ... crea il PreparedStatement ...
    
    int indice = 1;
    
    if (nome!=null && cognome!=null)
    {
        prepStat.setString (indice++, nome);
        prepStat.setString (indice++, cognome);
    }
    
    if (eta!=null)
        prepStat.setString (indice++, eta);
    Non ti elimina il problema dei doppi test ma almeno non hai problemi per gli indici (fintanto che fai gli stessi test nella stessa sequenza).
    E' proprio quello che ho fatto più o meno...però volevo proprio evitare la ripetizione di tutti gli IF....come faccio con le preparedStatement a mettere il % (Jolly) al posto del "?"... ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.