Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    [JAVA] problema LIKE e PreparedStatement

    'sera a tutti, torno a tormentarvi

    Allora, vorrei selezionare dal mio db tutti gli snippet_name nel cui codice ci sono le parole chaive inserite dall'utente.

    Ho fatto una prova dal terminale di derby (il dbms che uso) con questa query:

    codice:
    select distinct snippet_name
    from snippets
    where snippet_code like '%swing%'
    Eseguendo questa query ottengo il nome di tutti gli snippet che nel codice contengono "swing" (e quindi funziona correttamente).

    Ho provato poi a scrivere il seguente codice java:

    codice:
        public String[] searchIntoCode(String[] keywords) {
            // preparo la sfilza di condizioni da usare per la selezione 
            String whereClause = "";
            for (int i = 0; i < keywords.length - 1; i++) {
                whereClause += "snippet_code like '%?%' or ";
            }
            whereClause += "snippet_code like '%?%'";
    
            try {
                PreparedStatement preparedStatement = connection.prepareStatement(
                        "select distinct snippet_name " +
                        "from snippets where " + whereClause);
    
                // "sostituisco" i "?"  con la parola da cercare
                for (int i = 0; i < keywords.length; i++) {
                    preparedStatement.setString(i + 1, keywords[i]);
                }
    
                // effettuo la query
                ResultSet resultSet = preparedStatement.executeQuery();
    
                .... // altro codice che estrae i dati dal result set
    Problema: questo codice non funziona! Eseguendolo infatti ottengo questa eccezione:

    java.sql.SQLException: No input parameters.

    Penso che il problema sia in '%?%'. Ho guardato nella guida di derby ma non ho trovato esempi che possano essermi d'aiuto.. Qualcuno ha qualche idea?

    Il seguente codice funziona ma devo rinunciare al PreparedStatement (e non posso).

    codice:
         String whereClause = "";
            for (int i = 0; i < keywords.length - 1; i++) {
                whereClause += "snippet_code like '%" + keywords[i] + "%' or ";
            }
    
            whereClause += "snippet_code like '%" + keywords[keywords.length - 1] + "%'"; 
                Statement statement = connection.createStatement("select distinct snippet_name from snippets where " + whereClause);
                statement.executeQuery(whereClause);

    Grazie a chiunque mi aiuterà
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ho risolto passando i % a setString:

    codice:
    ...
            whereClause += "snippet_code like ?";
    ...
            preparedStatement.setString(i + 1, "%" + keywords[i] + "%");
    Ora funziona ma la cosa mi convice poco... C'è un'altro modo? Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Originariamente inviato da Alex'87
    Ora funziona ma la cosa mi convice poco... C'è un'altro modo? Grazie
    Convinciti Si fa proprio così.
    Al mio segnale... scatenate l'inferno!

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da R@ve M@ster
    Convinciti Si fa proprio così.
    Ah ok, mi sembrava un po' sporca la cosa, l'avevo provata quasi per caso

    Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2025 vBulletin Solutions, Inc. All rights reserved.