25. april 2005 - 18:25 Der er 15 kommentarer og
1 løsning

lidt om sql Plus og JDBC

hej alle..

jeg vil spørge jer onm det er muligt for sql plus  at ignorere en attribut, hvis denne er null.

et eksempel er f.eks at jeg har denne linie:

String query = "SELECT * FROM VARE WHERE vareID = '"+vareId+"' AND navn = ´"+navn+"' AND prodDato = '" +prodDato+ .......

vareId, navn, prodDato, osv er attributter , der kommer fra brugerindtastninger i en GUI.

Hvad kan jeg gøre for at sqlPlus accepterer denne linie, selvom  en bruger har undladt at skrive et "navn".

Hvilket vil sige at alle de attributer, der ikke er givet fra GUI'en skal undlades i denne query.

Jeg takker på forhånd og uddyber gerne hvis spørgsmålet er umuligt at forstå...;-)
Avatar billede arne_v Ekspert
25. april 2005 - 18:31 #1
Hvad med:

String query = "SELECT * FROM VARE WHERE "
if(vareId != null && !vareId.equals("")) {
  query = query + "vareID='" + vareId + "' AND ";
}
if(navn != null && !navn.equals("")) {
  query = query + "navn='" + navn + "' AND ";
}
...
query = query.substring(0, query.length() - 5); // skrot sidste AND

?
25. april 2005 - 19:31 #2
hej Arne...

Det lyder som en glimrende plan... men er du lige rar og fortælle mig hvad sidste linie gør : query = query.substring(0, query.length() - 5); // skrot sidste AND

...altså udover at fjerne AND fra sidste if sætning...tak
25. april 2005 - 19:42 #3
hej igen...

mangler der ikke et semikolon efter første linie??

eksemplet her, er med String attributter...har du en idé hvis det er integers samt Date??

jeg giver gerne flere point, hvis jeg strammer den...;-)
Avatar billede arne_v Ekspert
25. april 2005 - 19:46 #4
Den sidste linie gør ikke andet end at djerne de sidste 5 tegn. Man tager
fra tegn 0 til tegn længde - 5.
Avatar billede arne_v Ekspert
25. april 2005 - 19:47 #5
jo - der mangler et semikolon.
Avatar billede arne_v Ekspert
25. april 2005 - 19:47 #6
integers er bare uden '' omkring

altså ikke

if(vareId != null && !vareId.equals("")) {
  query = query + "vareID='" + vareId + "' AND ";
}

men

if(vareId != null && !vareId.equals("")) {
  query = query + "vareID=" + vareId + " AND ";
}
Avatar billede arne_v Ekspert
25. april 2005 - 19:48 #7
Med Date skal du nok skifte til PreparedStatement.
25. april 2005 - 20:01 #8
men der kommer altså disse fejl

Error(121,16): method !=(int, null) not found in class mypackage8.OrdreGateway
Error(121,35): object type required, but int found

men man kan vel heller ikke sætte en integer forskellig fra null....vel????
Avatar billede arne_v Ekspert
25. april 2005 - 20:03 #9
ah - nej - det kan du ikke
25. april 2005 - 20:04 #10
ok...jeg gør vel bare sådan her:

if(vareId >0 ) {
  query = query + "vareID=" + vareId + " AND ";
}
Avatar billede arne_v Ekspert
25. april 2005 - 20:05 #11
if(vareId != 0) {
  query = query + "vareID=" + vareId + " AND ";
}

eller nok snarere:

// vareId er en String
if(vareId != null && !vareId.equals("")) {
  int vareId2 = Integer.parseInt(vareId);
  query = query + "vareID='" + vareId2 + "' AND ";
}
25. april 2005 - 20:15 #12
Perfekt!!

tak for hjælpen...

svarer du lige..??
Avatar billede arne_v Ekspert
25. april 2005 - 20:17 #13
ok
Avatar billede agrezz Nybegynder
25. april 2005 - 20:44 #14
hvorfor sætte du ikke bare property på dine tabeller i oracle? (jeg går ud fra du bruger oracle 9i DB) :) du kan snildt sætte at en tabel godt må være null
Avatar billede arne_v Ekspert
25. april 2005 - 22:20 #15
ovenstående er variable i hans Java kode ikke tabel felter
Avatar billede agrezz Nybegynder
25. april 2005 - 22:25 #16
ah okay. læser ikke halvdelen :P
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
Computerworld tilbyder specialiserede kurser i database-management

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