Das Notes Forum
Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: CLI_Andreas_Schmidt am 30.01.07 - 19:11:59
-
Hi @all JavaDevss,
ich versuche über JDBC eine Notesdatenbank auszulesen. Der Zugriff funktioniert auch soweit. Was unschön ist:
1. Dass immer nach dem Passwort gefragt wird. (Auch wenn ich das Passwort bei getconnection mitgebe)
2. Muss bei JDBC ein Notes CLient installiert sein ?
hmmm.
Wie gesagt, die Ausgabe läuft an der Eclipse-Konsole.
Gruss
Andreas
-
Ach ja,
und dann kommt ganz am Ende des Scripts, das die Uhrzeit des names.nsf in der Vergangenheit liegt. Das mit der Uhrzeit ist ja jetzt nicht das Problem, nur dass überhaupt auf lokal das names gesucht wird, verstehe ich hier auch nicht.
-
Und noch etwas genauer.
beim Start geht eine DOS-BOX auf mit Titel des zugreifenden Users. (je nach lokale Arbeitsumgebung) Plus JAVAW.exe
Hier wird das Passwort abgefragt, obwohl das Passwort im Script mitgegeben wird.
?
-
Hi,
kannst du mal den code posten. Ruf dich echt mal an die Tage.
gruß Axel
-
Würde mich freuen : )
Hier der Code
import java.util.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import java.sql.Date;
import lotus.jdbc.domino.*;
public class jdbcconnect {
public static void main( String[] args )
{
Connection con;
Statement stmt;
ResultSet rs;
ResultSetMetaData rsmd = null;
String name;
String sql = "SELECT * FROM Termine";
System.out.println("1");
String connStr = "jdbc:domino:/DB/SERVER";
System.out.println(connStr);
try {
try {
Class.forName( "lotus.jdbc.domino.DominoDriver" );
}
catch( ClassNotFoundException e ) {
System.out.println( "ClassNotFoundExecption: " + e.getMessage() );
}
System.out.println("3");
System.out.println( "Connecting to URL " + connStr );
System.out.println("4");
con = DriverManager.getConnection( connStr, "USER", "PASSWORT" );
System.out.println("5");
System.out.println();
// Create Statement
stmt = con.createStatement();
System.out.println("6");
// Execute statement
rs = stmt.executeQuery( sql );
System.out.println("7");
System.out.println( "Executing... " + sql );
System.out.println("8");
System.out.println();
// Get Result set metadata
rsmd = rs.getMetaData();
System.out.println("9");
// Find number of columns in the result set
int colCount = rsmd.getColumnCount();
// Array to hold max display size per column
int[] len = new int[colCount+1];
// Print column Labels as header
for( int i=1; i<=colCount; i++ )
{
// Get column label
String label = rsmd.getColumnLabel( i );
// Store the maximum of display size or label length
if( label.length() > 10 )
len = label.length();
else
len = 10;
// Print label
System.out.print( label );
// Pad with blanks
fill( " ", len-label.length() );
// Column seperator
System.out.print( " " );
}
System.out.println();
// Print lines
for( int i=1; i<=colCount; i++ )
{
fill( "-", len );
System.out.print( " " );
}
System.out.println();
// Fetch all rows in the result set
while( rs.next() )
{
// Get all columns as String
for( int i=1; i<=colCount; i++ )
{
Object obj = rs.getObject( i );
boolean nl = rs.wasNull();
if( nl )
printCol( len, "null" );
else
printCol( len, obj.toString() );
}
System.out.println();
}
// Close the statement
stmt.close();
// Close the connection
con.close();
} catch( Exception e ) {
System.out.println( e.getMessage() );
}
}
// Print a string N times
static void fill( String s, int times )
{
if( times <= 0 )
return;
for( int i=0; i<times; i++ )
{
System.out.print( s );
}
}
// Print a column and pad it with blanks + separator
static void printCol( int len, String s )
{
System.out.print( s );
fill( " ", len-s.length() );
System.out.print( " " );
}
}
-
Wofür benutzt du überhaupt dieses Notes-JDBC?
Es gibt viele Hinweise, dass es von IBM praktisch nicht mehr unterstützt wird. Einen download konnte ich nur über einen Franzosen mit dem schönen Namen Domino Dude finden (http://www.dominodude.com/personal/tmk/blog.nsf/d6plinks/TKEN-6D8KVY).
Es gibt eine MENGE Möglichkeiten, Daten von Domino mit einem Java Programm auszulesen.
Am wenigsten Infrastruktur benötigen HTTP Zugriffe gegen ?ReadViewEntries-URLs von Ansichten. Dafür muß aber auf dem Domino Server der HTTP Task laufen und es funktioniert nur gegen Daten, die in Notes-Ansichten darstellbar sind (kein RichText). Zum auslesen-nicht-schreiben von aussen ist dieses ?ReadViewEntries echt einfacher als SOAP-Webservices, die natürlich auch gehen.
Besser als dies Notes-JDBC Api - an der wie gesagt IBM auch schon lange nicht mehr gearbeitet hat - ist der klassische Weg über Notes.jar.
z.B. http://www-128.ibm.com/developerworks/lotus/library/ls-Java_access_pt1/index.html
Local Calls sind oft allermeist die bessere Lösung als Remote Calls (Corba). Sofern ein Notes Client auf dem Rechner installiert ist, auf dem das Java Programm laufen soll, dann kann man mit "local" calls auch auf einen Server zugreifen.
Vorsicht mit obskuren jars wie notes-JDBC. Die Obskurität hat oft schmutzige Gründe.
Axel