Domino 9 und frühere Versionen > ND9: Entwicklung

ODBC - Verbindung ohne Datenquelle im Betriebssystem? (allgemeine Frage)

(1/2) > >>

hoschie:
Hallo liebe Community,

ich sehe gerade nicht ganz durch, daher muss ich die Professionals hier mal fragen:

Ich weiss, dass man auf RDBMS (Datenbanken-Tabellen) via ODBC zugreifen kann.

Dazu wird (normalerweise) eine Datenquelle definiert, die dann einen Namen (zur Adressierung) hat und ihren Treiber kennt.

Im Code kann man dann ein ODBCConnection-Objekt benutzen und gibt nur noch den Namen und Passwort an. Und wenn die Verbindung hergestellt ist, können querys abgesetzt und ausgewertet werden.

Ist das soweit korrekt wiedergegeben?

Gibt es eine Möglichkeit auf eine Datenbanktabelle zuzugreifen, OHNE eine Datenquelle im Betriebssystem anzugeben? Also nur im Code mit Datenbank, Tabellenname, User und Passwort.

Ich hoffe, ich konnte meine Frage klar formulieren.

Danke für jedweden Gedanken dazu, der hier Platz findet...

andresku:
Hallo,

die Frage ist (zu sehr) allgemein gestellt.
Welche Randbedingungen setzt du voraus? Welche Umgebung? Klingt zunächst nach Beschränkung auf LotusScript (?).
Wenn du Java nutzen würdest, kannst du über jDBC die DB-Verbindung so herstellen, wie gewünscht.

In dem Beispiel stellst du eine Verbindung mit einer PostgreSQL-RDBMS her:


--- Code: ---import java.sql.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;

public class CDatabase {
Connection conn;
String pghost, pgbase, pguser, pgpass, pgEnv;


/*
* Constructor - ohne Parameter
* Wertet die DB-Umgebung aus
* Stellt die Verbindung mit der DB her
*/
public CDatabase () throws SQLException
{
pghost = "hostname";
pgbase = "datenbank";
pguser = "beutzer";
pgpass = "geheim";

// Setup env for authenticating
if (System.getenv("PGHOST") != null) {
pghost = System.getenv("PGHOST");
}
if (System.getenv("PGDATADASE") != null) {
pgbase = System.getenv("PGDATABASE");
}
if (System.getenv("PGUSER") != null) {
pguser = System.getenv("PGUSER");
}
if (System.getenv("PGPASSWORD") != null) {
pgpass = System.getenv("PGPASSWORD");
}
String url = "jdbc:postgresql://"+pghost+"/"+pgbase+"?user="+pguser+"&password="+pgpass;

conn = DriverManager.getConnection(url);
}

....


}

--- Ende Code ---

Viele Grüße

hoschie:
Danke für deine Antwort, andresku.

Ja, ich habe es extra allgemein gestellt, da ich keine potentielle Möglichkeit ausschliessen wollte.

An die Java-Variante habe ich z.B. überhaupt nicht gedacht. Das werde ich mal testen.

Gibt es auch eine Script-Variante die funktionieren täte?

Vielen Dank.

umi:
Moin

Du kannst das JDBC auch über LS2J ansprechen :-)

flaite:
wichtig sind eigentlich nur 2 Dinge:
1. Benutze PreparedStatements, wann immer möglich. https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
Dann brauchst Du dir keine Gedanken zu SQL Injection machen.

2. Wenn Java 6 (wahrscheinlich) musst Du zumindest die Connection selbst closen.

Dieser Codeblock hinter dem link oben

--- Code: --- } finally {
        if (updateSales != null) {
            updateSales.close();
        }
        if (updateTotal != null) {
            updateTotal.close();
        }
        con.setAutoCommit(true);
    }
}

--- Ende Code ---

ist nicht zum Spass da und kann als Beispiel dienen...

Mit Java 7 gibt es Autocloseable Ressources. Das ist syntaktisch ein wenig besser. stackoverflow.com/questions/9260159/java-7-automatic-resource-management-jdbc-try-with-resources-statement

In erstaunlichen 50% der Fälle, in denen ich JDBC code sehe, halten sich die Entwickler nicht an diese 2 einfachen Grundsätze. Das kann leicht zu blockierten Ressourcen in Produktion und echt nicht so witzigen Security Lücken führen.
Übrigens war das schon 1999 bekannt, als ich meinen ersten JDBC code geschrieben hab.

PRO-TIP: Es kommt heute relativ selten vor, dass ich nacktes JDBC programmiere. Normal ist das eingewickelt in Frameworks wie JPA oder/und Hibernate oder auch ibatis. Es ist aber für bestimmte Aufgaben völlig i.O. nacktes JDBC zu verwenden, insbesondere wenn das kein reines Java Projekt ist. Dann hab ich mir den Source Code - unter der Beachtung obiger Regeln - eigentlich immer aus dem JDBC Tutorial von Oracle (link oben) bzw. früher SUN copy-und-pasted.

Gruß Axel

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln