[JAVA/SQL] Stored proc aanroepen

Pagina: 1
Acties:
  • 198 views sinds 30-01-2008
  • Reageer

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Ik wil een stored proc in MS SQL Server 2000 aanroepen, zonder op resultaat te wachten. De stored proc gaat allerlei dingen doen, wat precies is niet interessant voor het aanroepende proces.

Kan dat in Java? Een SQL statement uitvoeren, en direct weer verder gaan zonder op het resultaat van het SQL statement te wachten?

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 26-08 21:49

NDF82

Doomed Space Marine

Dan maak je toch een nieuwe Thread aan voor die Query..

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
mmmm, das wel een idee.

Ik was echter meer op zoek naar een oplossing die ervoor zorgt dat meteen na het uitvoeren van het execute statement mijn Java door loopt. Alsof er dus geen resultset terug komt. Die komt er ook niet, tenminste, geen zinnige waar iets mee gedaan wordt.

Als daar geen mogelijkheid voor is (in ASP is ie er wel) dan pas ik de truuk met de thread toe :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Nee, daar is geen truck voor. Je zou in C# bijvoorbeeld een asynchrone methode kunnen maken, maar dat bestaat in Java allemaal niet. Gewoon de methode in een aparte thread aanroepen dus.

Als je wilt weten hoe de async methode staat ten opzichte van de thread methode: hier staan wat slides en code.
http://www.gotdotnet.com/team/ericgu/

Je zou hiervoor overigens heel goed de concurrency utils van Doug Lea kunnen gebruiken. Deze zijn hier beschikbaar:

http://gee.cs.oswego.edu/...til/concurrent/intro.html

In de toekomst zullen deze in de standaard Java API worden opgenomen. Je moet bij de Executors wezen: deze voeren een Runnable uit. Het is wat netter om zo'n default implementatie te gebruiken ipv zelf een Thread aan te gaan maken: je abstraheert zo wat meer en je code wordt duidelijker en waarschijnlijk ook correcter.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
De vraag is niet of Java asynchroom een methode aan kan roepen, het is de vraag of er een manier is om een execute op een Connection object uit te voeren zonder te wachten op het resultaat. De methode verloopt volledig synchroom, alleen wordt het eventuele resultaat van de execute methode niet afgewacht.

correctie: de execute methode wacht niet antwoord van de SQL provider.

Ben het verder met je eens mbravenboer, maar ik vraag me dus net iets anders af, dan jij uitlegd :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
zneek: asynchroon - een execute uitvoeren zonder te wachten op het resultaat.
Uhme.... das ongeveer hetzelfde ... :*) .

Als je 'gewoon' een methode aanroept wordt er gewacht totdat deze methode klaar is met zijn werk. Dit is dus synchroon. Als je een methode wilt aanroepen zonder te wachten totdat deze klaar is (wachten op het resultaat dus), roep je de methode in feite asynchroon aan.

Dit kan je doen door de methode in een nieuwe thread aan te roepen, waardoor dus niet de huidige thread wordt gebruikt voor de uitvoer van de methode, maar het kan dus ook met behulp van speciale mechanismen voor het asynchroon uitvoeren van methoden.

Zie bijvoorbeeld ook deze presentatie:
Asynchronous programming (Don Box)

Als je wilt zien hoe het pas echt leuk wordt:

Modern Concurrency Abstractions for C# (Luca Cardelli & co, Microsoft Research) of de presentatie van hetzelfde stuk.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik wist helemaal niet dat hij zich daar ook mee bezig hield want hier had hij geloof ik nog niets eerder van op zijn site staan. Maar ik zal hem dit stuk ook even op mijn lijstje zetten.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
zneek schreef op 27 september 2002 @ 23:46:
De methode verloopt volledig synchroom, alleen wordt het eventuele resultaat van de execute methode niet afgewacht.

correctie: de execute methode wacht niet antwoord van de SQL provider.
Dat had ik later toegevoegd. Ik wil dus de methode execute 'normaal' aanroepen(synchroom), maar ik wil dat die methode niet wacht het antwoord(ResultSet) van de uitgevoerde SQL (in dit geval een stored procedure in SQL server).

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 26-08 21:49

NDF82

Doomed Space Marine

je wilt dus meerdere functies parallel aanroepen? Dan heb je toch echt meerdere Threads nodig hoor

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
zneek: Ik wil dus de methode execute 'normaal' aanroepen(synchroom), maar ik wil dat die methode niet wacht het antwoord(ResultSet) van de uitgevoerde SQL.
Tja, je kan de code in de JDBC driver niet aanpassen, dus je moet de methode aanroep sowieso inpakken als je extra functionaliteit wilt.

Dit kan je dus doen door de methode asynchroon aan te roepen (waarmee je precies hetzelfde effect bereikt als jij beschijft). Asynchroon aanroepen doe je in Java door direct met threads te werken. De Executors van Doug Lea zijn hiervoor fraaiere oplossing omdat ze voor je abstraheren.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
ok, kennelijk heeft java.sql.Connection de functionaliteit die ik zoek niet. ADODB.Connection onder ASP heeft het wel. Jammer genoeg volgende al die verschillende API's niet altijd dezelfde lijn.

Ik had verder twee opties: 1. Java thread. 2 SQL DTS. Ik heb maar voor het tweede gekozen. Ik gebruik verder geen Threads in de applicatie, en wel DTS. Dus.

Bedankt voor de hulp. Ik ga zeker die links van mbravenboer nog eens bestuderen. Voor de volgende keer :)
Pagina: 1