OpenWeatherMap liefert Wetterdaten. Dieses Beispiel nutzt die 5-Tage-Vorhersage (3-Stunden-Schritte) und zeigt parametrisierte Abfragen mit FILTER — der Ortsname wird als Query-Parameter q übergeben, der API-Schlüssel über Connection Properties (auth=apikey).
java -jar /pfad/zu/restjdbc.jar openweather.sql
Die Datei openweather.sql enthält Verbindung und Beispiel-Abfragen. Vorgehen:
restjdbc.jar)apiKey=XXXX durch Ihren Schlüssel ersetzenopenweather.sql und die Spec liegenconnect 'jdbc:rest:https://api.openweathermap.org|spec=openweather-spec.json,auth=apikey,apiKey=Ihr_Schlüssel,apiKeyLocation=query,apiKeyParam=appid'
jdbc:rest:https://api.openweathermap.org
Die Basis-URL der API steht in der JDBC-URL.
| Bestandteil | Wert |
|---|---|
| Treiber-Präfix | jdbc:rest: |
| API-Basis-URL | https://api.openweathermap.org |
| Schema (SQL) | public (Standard) |
Beispiel-Verbindung (Java):
Properties props = new Properties();
props.setProperty("spec", "/pfad/zu/openweather-spec.json");
props.setProperty("auth", "apikey");
props.setProperty("apiKey", System.getenv("OPENWEATHER_API_KEY"));
props.setProperty("apiKeyLocation", "query");
props.setProperty("apiKeyParam", "appid");
Connection conn = DriverManager.getConnection(
"jdbc:rest:https://api.openweathermap.org", props);
| Property | Wert | Erforderlich |
|---|---|---|
spec |
Pfad zur Spec | Ja |
auth |
apikey |
Ja |
apiKey |
OpenWeather API-Schlüssel | Ja |
apiKeyLocation |
query (Standard, bei OpenWeather explizit) |
Nein |
apiKeyParam |
Name des Query-Parameters (appid bei OpenWeather) |
Ja |
Spec-Pfad: absoluter Pfad zu Ihrer lokalen Kopie der Spec-Datei.
Spec-Datei: openweather-spec.json
Datei: openweather-spec.json
Auszug:
{
"entities": [
{
"name": "forecast",
"path": "/data/2.5/forecast?units=metric",
"dataPath": "/list",
"pagination": { "type": "none" },
"write": false,
"columns": [
{ "name": "dt", "type": "BIGINT", "primaryKey": true },
{ "name": "temp", "type": "DOUBLE", "jsonPath": "/main/temp" },
{ "name": "humidity", "type": "BIGINT", "jsonPath": "/main/humidity" },
{ "name": "description", "type": "VARCHAR", "jsonPath": "/weather/0/description" }
]
}
]
}
forecast| SQL-Tabelle | REST-Pfad | Paginierung |
|---|---|---|
forecast |
/data/2.5/forecast?units=metric |
none (eine Antwort mit bis zu 40 Einträgen) |
units=metric: Temperaturen in °C (fest in der Spec).dataPath /list: Die Vorhersage-Einträge stehen im Array list der JSON-Antwort.jsonPath: Temperatur und Wetterbeschreibung liegen verschachtelt unter main bzw. weather.OpenWeather erwartet den API-Schlüssel als Query-Parameter appid, nicht als Bearer-Header. Dafür gibt es das Auth-Verfahren apikey:
props.setProperty("auth", "apikey");
props.setProperty("apiKey", "Ihr_OpenWeather_Schlüssel");
props.setProperty("apiKeyLocation", "query");
props.setProperty("apiKeyParam", "appid");
Der Treiber hängt bei jedem Request appid=… an die URL an. Der Ortsname kommt zusätzlich per FILTER q=… dazu.
SELECT dt, temp, humidity, description FROM forecast FILTER q=Berlin;
SELECT dt, temp, humidity FROM forecast FILTER q=London;
SELECT dt, temp, description FROM forecast FILTER q=New York;
| SQL | HTTP |
|---|---|
SELECT … FILTER q=Berlin |
GET …/forecast?appid=…&units=metric&q=Berlin |
SELECT … FILTER q=London |
GET …/forecast?appid=…&units=metric&q=London |
FILTER q=… setzt den Ortsnamen als Query-Parameter — typisches Muster für parametrisierte REST-Abfragen.
Spalten mit Leerzeichen in Werten ggf. quoten: FILTER q='New York'.
Nicht unterstützt ("write": false).
SELECT table_name FROM system.table_list;
SELECT column_name, type_name FROM system.column_list WHERE table_name = 'forecast';
/data/2.5/weather liefert ein einzelnes JSON-Objekt (kein Array) — der Treiber erwartet Arrays. Für Vorhersagen eignet sich /data/2.5/forecast mit dataPath: "/list".FILTER param1=… AND param2=… — siehe Webmetic-Beispiel. Feste Parameter wie units stehen in der Spec im path; der API-Schlüssel über auth=apikey.