stephang
I'm new here

Datenbankzugriff vom Modul aus

Jump to solution

Hallo Zusammen,

ich möchte gerne aus einem Modul heraus auf die an FirstSpirit angeschlossene MySQL Datenbank zugreifen bzw. einfach nur alle Zeilen einer Spalte in einer definierten Tabelle auslesen. Ist es möglich, im Modul nicht die Datenbank direkt via JDBC zu befragen, sondern FirstSpirit? In FirstSpirit ist ja bereits alles konfiguriert und hat selbst ein Implementierung zur Abfrage der Datenbank? Da könnte ich die doch nutzen, oder?

Leider habe ich keine entsprechende API hierfür gefunden. Potentiell wäre der QueryAgent geeignet, jedoch sehe ich keine Möglichkeit die Abfrage auf eine Tabelle in der Datenbank zu beschränken.

Hat jemand eine Idee? Oder muss ich wirklich eine direkte Verbindung vom Modul zur Datenbank via JDBC aufbauen?

Vielen Dank für Anregungen im Voraus!

1 Solution

Accepted Solutions

Hallo Sebastian,

der von dir beschrieben Weg hat mich ans Ziel geführt. Vielen Dank!

Hier mein Code:

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.Store.Type;

import de.espirit.firstspirit.access.store.templatestore.Query;

import de.espirit.firstspirit.access.store.templatestore.Schema;

import de.espirit.firstspirit.agency.SpecialistsBroker;

import de.espirit.firstspirit.agency.StoreAgent;

import de.espirit.firstspirit.service.value.ValueService;

import de.espirit.or.EntityList;

import de.espirit.or.Session;

import de.espirit.or.schema.Entity;

...

StoreAgent storeAgent = broker.requestSpecialist(StoreAgent.TYPE);

Store store = storeAgent.getStore(Type.TEMPLATESTORE);

Query query = (Query) store.getStoreElement(16060);

Schema schema = query.getSchema();

Session session = schema.getSession();

EntityList results = session.executeQuery(query.getSelectStatement());

Iterator<Entity> resultsIter = results.iterator();

while (resultsIter.hasNext())

{

     Entity element = resultsIter.next();

     ....

}

View solution in original post

3 Replies
gockel
Crownpeak employee

Hi,

In FirstSpirit ist ja bereits alles konfiguriert und hat selbst ein Implementierung zur Abfrage der Datenbank? Da könnte ich die doch nutzen, oder?

auf die Schnelle ein kurzer Abriss (Pseudo-Code) und ein paar Einstiegspunkte.

  • Abfrage in FirstSpirit zusammenklicken, die die gewünschten Daten liefert.
  • Diese Abfrage im Modul holen "Query query = Store#getStoreElement(UID_DER_QUERY))."
  • Schema holen (Parent der Query)
  • Session (OR-Session) vom Schema holen (Session session = schema.getSession())
  • Auf dieser die Query ausführen (Session#executeQuery(query.getSelectStatement())

Schema#getSession

Session#executeQuery

Query#getSelectStatement

Gruß

Hallo Sebastian,

der von dir beschrieben Weg hat mich ans Ziel geführt. Vielen Dank!

Hier mein Code:

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.Store.Type;

import de.espirit.firstspirit.access.store.templatestore.Query;

import de.espirit.firstspirit.access.store.templatestore.Schema;

import de.espirit.firstspirit.agency.SpecialistsBroker;

import de.espirit.firstspirit.agency.StoreAgent;

import de.espirit.firstspirit.service.value.ValueService;

import de.espirit.or.EntityList;

import de.espirit.or.Session;

import de.espirit.or.schema.Entity;

...

StoreAgent storeAgent = broker.requestSpecialist(StoreAgent.TYPE);

Store store = storeAgent.getStore(Type.TEMPLATESTORE);

Query query = (Query) store.getStoreElement(16060);

Schema schema = query.getSchema();

Session session = schema.getSession();

EntityList results = session.executeQuery(query.getSelectStatement());

Iterator<Entity> resultsIter = results.iterator();

while (resultsIter.hasNext())

{

     Entity element = resultsIter.next();

     ....

}

Hallo Stephan,

danke, dass du deine Lösung hier für die Allgemeinheit gepostet hast. Kannst du bitte noch die Nachricht als "richtige Antwort" markieren, damit anderer Forenbenutzer sie leichter finden können.

Viele Grüße

Thorsten

0 Kudos