sql >> Database >  >> RDS >> Mysql

Java-desktop - hoe databasetoegang te scheiden van de UI-thread?

Het lijkt erop dat uw db-query's worden uitgevoerd vanuit de UI-thread, ook al zegt u dat een geplande taak de query's uitvoert (?). Voor de zekerheid kun je een stacktrace uitprinten waar je toegang hebt tot de database:

new Exception().printStacktrace();

Over naar uw voorgestelde oplossing:het lijkt een fatsoenlijk ontwerp als uw db-query's traag zijn en anders uw gebruikersinterface zouden bevriezen. Je zou een gebeurtenissysteem kunnen implementeren tussen je UI-laag en de db-laag, misschien een eenvoudige op wachtrij gebaseerde benadering.

BEWERKEN:

Er zijn zeer waarschijnlijk voorbeelden om een ​​op gebeurtenissen gebaseerde oplossing te implementeren.

Disclaimer:ik heb al jaren geen echte UI-programmering meer gedaan.

  1. De gebruiker klikt op een knop in de gebruikersinterface. De UI-thread plaatst een gebeurtenisobject (DataWantedEvent) in een wachtrij (java.util.Queue), verandert een label ("Wachten op gegevens...") en gaat dan verder en wacht op andere gebruikersinteracties.
  2. De db-laagthread neemt de gebeurtenis uit de wachtrij en zoekt in de database. Het resultaat wordt teruggepost in een andere wachtrij in een resultaatobject.
  3. Een UI-thread (waarschijnlijk niet de hoofdthread) haalt het resultaatobject uit de resultatenwachtrij en werkt de UI bij.

Een wachtrij voor het terugplaatsen van resultaatobjecten naar de gebruikersinterface is mogelijk niet nodig. Een updatemethode kan direct worden aangeroepen.

Als de gebruiker op een annuleerknop klikt, kan de updategebeurtenis/callback worden genegeerd of, indien mogelijk, de db-query worden geannuleerd.



  1. Kan geen entiteitsgegevensmodel maken - met MySql en EF6

  2. PARSE() vs CAST() vs CONVERT() in SQL Server:wat is het verschil?

  3. Kan mysql een csv- of ander txt-bestand in één kolom importeren?

  4. CHR() Functie in Oracle