Avatar billede mcphreak Nybegynder
06. juni 2001 - 10:36 Der er 5 kommentarer og
3 løsninger

Brug af prepared Statement

Jeg har oprettet et Prepared Statement med to ?. Når jeg så prøver at indsætte parametrene, så giver den syntaksfejl.

Hvis jeg fjerner det første spørgsmåltegn, og alle de if-sætninger som tilhører denne så virker det fin (Selvfølgelig slaæ man så lige ændre arrayindexet i setString metoden)
Er der nogen som kan se fejlen?


PreparedStatement GetScans = C.prepareStatement(\"Select * from Scanninger ? Order by ?;\");

try{
    if (action.startsWith(\"2\"))
    {
    //GetScans.setString(1,\" Where Dato < \"+ to +\" and Dato > \"+from);
    }
}
catch (Exception e)
{
    GetScans.setString(1,\" \");
}
try{
    if (sort.startsWith(\"1\"))
    {
        GetScans.setString(2,\"jobnr\");
    }
    if (sort.startsWith(\"2\"))
    {
        GetScans.setString(2,\"ID\");
    }
}
catch (Exception e)
{
    GetScans.setString(2,\"ID\");
}
Avatar billede Slettet bruger
06. juni 2001 - 10:38 #1
En \'?\' skal gøre det ud for en variabel... Du kan ikke bruge det til at tilføje betingelser til din statement.
Avatar billede mcphreak Nybegynder
06. juni 2001 - 10:39 #2
Hvordan skal jeg så gøre dette?
Avatar billede skaanild Nybegynder
06. juni 2001 - 10:42 #3
Hvad er fejlen ??

Når du laver sammlingen bruger du så det rigtige dato format ?
Avatar billede nute Nybegynder
06. juni 2001 - 10:42 #4
Du kan ikke bygge dine SQL på den måten. Du skal gjøre noe ála dette:

StringBuffer strBuffer = new StringBuffer(\"Select * from Scanninger\");

try{
    if (action.startsWith(\"2\")){
          strBuffer.append(\" Where Dato < \" + to +\" and Dato > \"+from );
    }
}catch (Exception e) {
}
strBuffer.append(\" ORDER  BY \");
try{
    if (sort.startsWith(\"1\")){
      strBuffer.append(\"jobnr\");
    }
    if (sort.startsWith(\"2\")){
      strBuffer.append(\"ID\");
    }
}catch (Exception e){
  strBuffer.append(\"ID\");
}
PreparedStatement GetScans = C.prepareStatement(strBuffer);

/nute
Avatar billede delbing Nybegynder
06. juni 2001 - 10:43 #5
Opbyg din sql query i en StringBuffer (eller flere), og når det er klar, så opretter du et PreparedStatement
Avatar billede skaanild Nybegynder
06. juni 2001 - 10:43 #6
Så skal du lave 2 forskelinge sql sætninger afhæninge om action.startsWith(\"2\") eller 1
Avatar billede mcphreak Nybegynder
06. juni 2001 - 10:45 #7
Takker, jeg ved det ikke var mange point, men i har hjulpet meget alle tre
Avatar billede Slettet bruger
06. juni 2001 - 10:47 #8
Det følgende burde køre:

PreparedStatement GetScans=null;
if (action.startsWith(\"2\")) {
  GetScans = C.prepareStatement(\"Select * from Scanninger Where Dato < \"+ to +\" and Dato > \"+from Order by ?\");
} else {
  GetScans = C.prepareStatement(\"Select * from Scanninger Order by ?\");
}
if (sort.startsWith(\"1\")) GetScans.setString(2,\"jobnr\");
else if (sort.startsWith(\"2\")) GetScans.setString(2,\"ID\");
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