Avatar billede markymarc Nybegynder
06. august 2004 - 14:43 Der er 9 kommentarer og
1 løsning

Hvorfor kan jeg ikke bruge denne ejb-ql/jboss-ql query??

Jeg har en cmp med en masse string's og Integer's. Og jeg er lidt doven så gider jo helst ikke side og lave en finder metode til hver. Så har prøvet at lave to overordent. Men de vil ikke virke, nogle der kan fortælle mig hvorfor?

På forhånd tak

Fra mit localhome:

Collection findByX(String coloum, String x) throws FinderException;
Collection findByY(String coloum, int y) throws FinderException;

Fra min jbosscmp-jdbc(men kunne næsten lige så godt være min ejb-jar):

<query>
                <query-method>
                    <method-name>findByStringX</method-name>
                    <method-params>
                        <method-param>java.lang.String</method-param>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                </query-method>
                <jboss-ql>
                    <![CDATA[
                              SELECT OBJECT(g)
                              FROM BrugerEJB g
                              WHERE G.?1 = ?2
                            ]]>
                </jboss-ql>
            </query>
            <query>
                <query-method>
                    <method-name>findByIntegerY</method-name>
                    <method-params>
                        <method-param>java.lang.String</method-param>
                        <method-param>int</method-param>
                    </method-params>
                </query-method>
                <jboss-ql>
                    <![CDATA[
                              SELECT OBJECT(g)
                              FROM BrugerEJB g
                              WHERE g.?1=?2
                            ]]>
                </jboss-ql>
</query>
Avatar billede arne_v Ekspert
06. august 2004 - 21:14 #1
Jeg har noget JBoss docs som siger følgende:

Parameters are only allowed on the right hand side of
a comparison. For example:
gangster.hangout.state = ?1 Legal
?1 = gangster.hangout.state NOT Legal

så jeg tror ikke at du kan lave den query.

Problemet bunder formentlig i at det skal laves til en PreparedStatement
og de tillader kun ? for værdier ikke for tabel og felt navne.
Avatar billede markymarc Nybegynder
09. august 2004 - 08:11 #2
Ved du som om der findes, en anden løsning. Sådan at jeg ikke skal side og lave alle de her querys hvergang?
Avatar billede arne_v Ekspert
09. august 2004 - 12:39 #3
Jeg er ret sikker på at de fleste bare laver det nødvendige antal findere.

De findere skal jo kaldes et sted fra og den kode der kalder finderen er
jo mange flere linier end finderen selv.

Umiddelbart er den bedste ide jeg kan komme på, hvis databasen understøtter
stored procedures og dynamisk SQL. Det gør f.eks. MS SQLServer.
Avatar billede markymarc Nybegynder
09. august 2004 - 12:56 #4
ok tak for det, ligger du lige et svar.
Avatar billede arne_v Ekspert
09. august 2004 - 13:03 #5
ok
Avatar billede arne_v Ekspert
09. august 2004 - 13:04 #6
En anden ide: lav en enkelt query som søger i flere felter med OR imellem. Det er faktisk ofte en bekvem søgning.
Avatar billede markymarc Nybegynder
09. august 2004 - 13:27 #7
Jo men få man så ikke bare så mange resultater?
Avatar billede arne_v Ekspert
09. august 2004 - 13:38 #8
Måske men ikke altid.

Forestil dig 4 felter:
  fornavn
  efternavn
  adresse
  telefonnummer

Hvad er sandsyneligheden for at få hit på mere end et af felterne ? Meget lille !
Avatar billede markymarc Nybegynder
09. august 2004 - 14:14 #9
Hvad så med wildcard søgninger??
Avatar billede arne_v Ekspert
09. august 2004 - 14:32 #10
Med 4 gange LIKE så vil du naturligvis kunne få hits i flere kolonner.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester