Newsgroup: it.comp.java
Titolo: Query Access Java problemi virgolette

Sto facendo un piccole db con access e gestito d un programma java... Ma 
quando passo la query a java ci sono dei paramentri dentro le vorgolette ad 
esempio:
ResultSet rs2 = stm2.executeQuery("SELECT Fanta.Nome, Fanta.Cognome, 
Sum(Soldi.Soldi_X) AS SommaDiSoldi_XFROM Fanta, SoldiGROUP BY Fanta.Nome, 
Fanta.CognomeHAVING (((Fanta.Nome)="Nome") AND 
((Fanta.Cognome)="Cognome"));");
Come si può capire mi danno problemi "Nome" e "Cognome"


Devi scrivere una query parametrica.
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/07/colinux-linux-dentro-windows.html


http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html


 Come si può capire mi danno problemi "Nome" e "Cognome"
in sql i delimitatori di stringa sono i singoli apici. 
-- 
++ Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://unopuntozero.wordpress.com/
http://www.flickr.com/photos/marko_po/

> Come si puņ capire mi danno problemi "Nome" e "Cognome"


 La query non viene soddisfatta...
Se incolli codice e messaggio di errore è più facile aiutarti.


 Mettendo i songoli apici perņ continuo ad avere problemi...
Anche se funzionasse non dovresti usarli, devi usare i PreparedStatement 
per creare query sicure.
Cosa succederebbe se uno inserisce un apice tra i caratteri del suo nome?



Ma stai facendo un programma per il Fantacalcio?


 ha scritto nel messaggio 
news:pan.2008.10.15.19.16.20@antani...


 ha scritto 
nel messaggio news:gd5jkh$gab$2...@aioe.org...


 non viene soddisfatta all'interno del programma...
Cosa vuol dire che non viene soddisfatta? Le condizioni sono 
soddisfatte, le query si eseguono.
Incolla i messaggi di errore, non usare una terminologia che conosci poco.
Spiega il risultato attesso e quello ottenuto.
Cercati gli esempi e lezioni sul sito della Sun su JDBC. Seguili passo 
passo e crea un programma che funziona, quando l'hai fatto modificalo 
per farlo diventare quello che ti serve.
http://faq.javaranch.com/java/ItDoesntWorkIsUseless
http://faq.javaranch.com/java/TellTheDetails


 }
---------------- code -----------------------


 Fanta.Cognome HAVING (((Fanta.Nome)=[Immetti nome:]));");
Mi sembra che la sintassi SQL sia in formato M$, ovvero corrotta.
"SELECT Fanta.Nome, Fanta.Cognome, Sum(Soldi.Soldi_X) AS SommaDiSoldi_X 
FROM Fanta, Soldi
GROUP BY Fanta.Nome, Fanta.Cognome
HAVING (((Fanta.Nome)=[Immetti nome:]));"
1) Nella clausola HAVING se, come immagino, Fanta.Nome e' un campo CHAR 
o VARCHAR, cio' che segue l'uguale puo' essere una costante letterale, 
quindi racchiusa tra apici singoli, o un nome di campo di una tabella: 
il valore "[Immetti nome:]" non e' nessuno dei due.
2) Nella clausola HAVING, tutte quelle parentesi mi sembrano inutili e 
forse fuorvianti.
3) Il ; (punto-e-virgola) finale e' sintatticamente scorretto.
Se, come immagino, "[Immetti nome:]" dovrebbe richiedere il prompt 
dell'utente, dovresti usare una concatenazione oppure una 
PreparedStatemant, utilizzando, ad esempio, la String nomeImmesso 
contenente il nome immesso dall'utente in un qualche modo.
Nel primo caso la select sarebbe:
ResultSet rs2= stm.executeQuery("SELECT Fanta.Nome, Fanta.Cognome, 
Sum(Soldi.Soldi_X) AS SommaDiSoldi_X FROM Fanta, Soldi GROUP BY 
Fanta.Nome, Fanta.Cognome HAVING Fanta.Nome ='"+nomeImmesso+"'");
Nel secondo sarebbe:
PreparedStatement pstm = con.prepareStatement("SELECT Fanta.Nome, 
Fanta.Cognome, Sum(Soldi.Soldi_X) AS SommaDiSoldi_X FROM Fanta, Soldi
GROUP BY Fanta.Nome, Fanta.Cognome HAVING Fanta.Nome= ? ");
pstm.setString(1, nomeImmesso);
ResultSet rs2= pstm.executeQuery();
dove 1 e' l'ordinale del parametro basato su 1 (0 non e' dato).
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'

Roberto ha scritto:

Come ti hanno gia' detto e' il caso che il delimitatore di stringa sia 
l'apice.
Ricordati che per tutti gli attributi che possono contenere un apice 
tale apice va raddoppiato (caso classico il cognome)
i.e. nel caso che devi cercare D'Agostino Giovanni la select che passi 
e' fatta cosi':
SELECT Fanta.Nome, Fanta.Cognome,
Sum(Soldi.Soldi_X) AS SommaDiSoldi_X FROM Fanta, Soldi GROUP BY Fanta.Nome,
Fanta.Cognome HAVING Fanta.Nome='Giovanni' AND
Fanta.Cognome='D''Agostino'
Comprendo che farsi fare le query dal QBE di access e' comodo ma mette 
troppe parentesi che confondono
--
ac