sql >> Database teknologi >  >> RDS >> Mysql

Java desktop - hvordan adskilles databaseadgang fra UI-tråden?

Det ser ud til, at dine db-forespørgsler køres fra UI-tråden, selvom du siger, at en planlagt opgave kører forespørgslerne (?). For at være sikker kan du udskrive en stacktrace, hvor du tilgår databasen:

new Exception().printStacktrace();

Over til din foreslåede løsning:det virker som et anstændigt design, hvis dine db-forespørgsler er langsomme og ellers ville fryse din brugergrænseflade. Du kunne implementere et begivenhedssystem mellem dit UI-lag og db-laget, måske en simpel købaseret tilgang.

EDIT:

Der er højst sandsynligt eksempler på, hvordan man implementerer en begivenhedsbaseret løsning.

Ansvarsfraskrivelse:Jeg har ikke lavet nogen rigtig UI-programmering i mange år.

  1. Brugeren klikker på en knap i brugergrænsefladen. UI-tråden sætter et hændelsesobjekt (DataWantedEvent) i en kø (java.util.Queue), ændrer en etiket ("Venter på data...") og fortsætter derefter og venter på andre brugerinteraktioner.
  2. Db-lagstråden tager hændelsen fra køen og forespørger i databasen. Resultatet bogføres tilbage i en anden kø i et resultatobjekt.
  3. En brugergrænsefladetråd (sandsynligvis ikke hovedtråden) tager resultatobjektet fra resultatkøen og opdaterer brugergrænsefladen.

En kø for at sende resultatobjekter tilbage til brugergrænsefladen er muligvis ikke nødvendig. En opdateringsmetode kunne påkaldes direkte.

Hvis brugeren klikker på en annulleringsknap, kan opdateringshændelsen/tilbagekaldet ignoreres, eller hvis det er muligt, kan db-forespørgslen blive annulleret.



  1. mysql_fetch_array() forventer, at parameter 1 er et ressourceproblem

  2. vælg alle rækker undtagen de fire seneste

  3. Opret databaser med liquibase på tom mysql-instans

  4. Oprettelse af et brugerdefineret SQL Server Docker-billede oven på det officielle billede