'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:
Eseguendo questa query ottengo il nome di tutti gli snippet che nel codice contengono "swing" (e quindi funziona correttamente).codice:select distinct snippet_name from snippets where snippet_code like '%swing%'
Ho provato poi a scrivere il seguente codice java:
Problema: questo codice non funziona! Eseguendolo infatti ottengo questa eccezione: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
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à![]()


Rispondi quotando
