Autor Thema: ODBC - Verbindung ohne Datenquelle im Betriebssystem? (allgemeine Frage)  (Gelesen 3958 mal)

Offline hoschie

  • Frischling
  • *
  • Beiträge: 49
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...

Offline andresku

  • Frischling
  • *
  • Beiträge: 4
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);
	}

....


}

Viele Grüße
« Letzte Änderung: 21.08.15 - 17:12:50 von andresku »

Offline hoschie

  • Frischling
  • *
  • Beiträge: 49
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.


Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Moin

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

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
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);
    }
}

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
« Letzte Änderung: 24.08.15 - 14:55:56 von flaite »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Tip: Guck' Dir mal die "LC LSX" an in der Hilfe.

ODBC setzt m.E. nach eine clientseitig definierte ODBC-Verbindung voraus. Für Oracle (mit installiertem Oracle Client auf dem entsprechenden Client oder Server) oder MSSQL brauchst Du das nicht.

Viel Erfolg

Offline Christian Zalto

  • Frischling
  • *
  • Beiträge: 5
Gibt es auch eine Script-Variante die funktionieren täte?

In Lotusscript nehme dafür gerne die "ADODB.Connection" Variante (Client ist damit Windows-only)
Das geht auch ohne vorher definierte DSNs - wenn man die richtigen Connection-Strings in Erfahrung bringt.

Ein Beispiel wäre das hier gezeigte "ConnectionExample4"
https://msdn.microsoft.com/en-us/library/ms807027.aspx#workshp2_topic3

Eine Anleitung, wie man bei diesen DSNlosen ODBC-Connections an den Connection-String kommt, findet sich hier:
http://www.visokio.com/kb/db/dsn-less-odbc

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz