Forum: PC-Programmierung Portierung Java DB-Zugriffe von MSSQL2000 nach MSSQL2008;


von interrupt (Gast)


Lesenswert?

Hallo,
ich habe hier mehrere Java-Programme (JProg_x), die alle nach dem 
gleichen Muster gestrickt sind und bisher auf einem Windows2000 
Server-Betriebssystem mit der Datenbank MSSQL-Server 2000 problemlos 
laufen und jetzt auf ein Windows2008 Server Betriebssytem mit dem MSSQL 
Server 2008 portiert werden sollen.
Die Java-Programme werden mit dem JSL (Java Server Launcher) als Dienste 
installiert und die Konfigurationsdaten für den Datenbankzugriff werden 
jeweils aus der Datei "config\configuration.xml" in dem 
programmspezifischen Verzeichnis gelesen.

Dort ist der Datenbankzugriff so konfiguriert :
<database>
  <driver>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver
  <url>jdbc:microsoft:sqlserver://192.168.24.4:1433;DatabaseName=db_xy;Sel 
ectMethod=Cursor;</url>
  <user>db_xyu</user>
  <password>xyz</password>
</database>

Der Datenbankzugriff mit dem Programm "JProg_1.jar" funktioniert damit 
offenbar (es kommen jedenfalls keine Exception-Meldungen o.ä. im 
Logfile, auch wenn ein näherer Test mangels aktueller Daten, auf die das 
Programm reagieren müsste, schlecht möglich ist).

Die beiden praktisch identischen  Programme "JProg_2.jar" und 
"JProg_3.jar" mit dem gleichen Datenbanktreiber bekommen jedoch keine 
Datenbankverbindung und bringen u.a. diese Fehlermeldung :

ERROR 2012-07-10 01:20:01,081 [Timer-0] (?:?):Could not connect to 
Database (Driver: com.microsoft.jdbc.sqlserver.SQLServerDriver URL: 
jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=db_xy;SelectM 
ethod=direct  User: db_xyu Password: xyz)!  Maybe in the next run!

de.?????.????.common.exceptions.ConfigurationRwisException: Could not 
connect to Database (Driver: 
com.microsoft.jdbc.sqlserver.SQLServerDriver URL: 
jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=swis_regio;Se 
lectMethod=directUser:  db_xyu Password: xyz)!

Kann es sein, dass mit dem oben angegebenen Treiber bei der 
Betriebsystem- / Datenbankkombination "W2008 Server / MSSQL2008" ev. nur 
ein Programm eine Datenbankverbindung aufbauen kann und zusätzliche 
Verbindungen von anderen Programmen aus nicht möglich sind ?

Hat jemand Tipps für ev. besser geeignete Java-Datenbanktreiber für die 
Betriebsystem- / Datenbankkombination "W2008 Server / MSSQL2008", die 
man in dem Konfigurationsfile angeben könnte?

Compiliert wird der Java-Code mit einem Ant- buildfile (build.xml) unter 
Eclipse, Java Version 1.6

Danke !

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

interrupt schrieb:
> Kann es sein

... Testfall schreiben bringt Gewissheit. Exception und Konfiguration 
scheinen sich zu unterscheiden (cursor versus direkt).
Eventuell musst du den Instanznamen noch angeben.

von interrupt (Gast)


Lesenswert?

Läubi .. schrieb:
> ... Testfall schreiben bringt Gewissheit. Exception und Konfiguration
> scheinen sich zu unterscheiden (cursor versus direkt).

Ich habe schon "cursor" und "direct" ausprobiert, hat in beiden Fällen 
nicht funktioniert.

von Peter II (Gast)


Lesenswert?

Hast du die datenbank auch passend auf den Gemischten anmeldemodues 
eingestellt? Im Standard verwendet die Datenbank nur Windows-Anmeldungen 
da kommt man mit einem Passwort nicht rein.

von interrupt (Gast)


Lesenswert?

Peter II schrieb:
> Hast du die datenbank auch passend auf den Gemischten anmeldemodues
> eingestellt? Im Standard verwendet die Datenbank nur Windows-Anmeldungen
> da kommt man mit einem Passwort nicht rein.

Ja, eingestellt ist SQL-Authentifizierung, und wie gesagt, mit einem 
Programm scheint der Zugriff ja zu funktionieren.

von Peter II (Gast)


Lesenswert?

steht der anmeldeversuch im Log der Datenbank?

von interrupt (Gast)


Lesenswert?

Peter II schrieb:
> steht der anmeldeversuch im Log der Datenbank?

Gute Frage, muss ich nachsehen.

Unabhängig davon : Welche Datenbanktreiber verwendet ihr bei der 
Kombination  "W2008 Server / MSSQL2008"

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

interrupt schrieb:
> und wie gesagt, mit einem
> Programm scheint der Zugriff ja zu funktionieren

Dann scheint es ja auch kein Problem zu geben... Geh doch einfach mal 
systematisch auf Fehlersuche anstatt im Nebel zu stochern...

von Troll (Gast)


Lesenswert?

interrupt schrieb:
> nur
> ein Programm eine Datenbankverbindung aufbauen kann und zusätzliche
> Verbindungen von anderen Programmen aus nicht möglich sind ?

Ja da war was. Ich musste damals in die Login-Daten rein schreiben (mit 
dem String, mit dem ich mich verbinde), dass ich Multiple Verbindungen 
haben will

von Peter II (Gast)


Lesenswert?

interrupt schrieb:
> Unabhängig davon : Welche Datenbanktreiber verwendet ihr bei der
> Kombination  "W2008 Server / MSSQL2008"

per ODBC verwenden wir einfach den Systemtreiber der geht mit der 2000 
un dem 2008 Server.

Auch unter linux mit FreeTDS musst ich keinen Treiber welchseln wo wir 
von 2000 auf 2008 umgellt haben.

Ich glaube MS hat bei der anmeldung nichts geändert, und wenn eine 
anwendung geht wird as Problem wo anders sein. (Andere Port, falsche IP 
usw).


> Could not connect to Database
Kommt die meldung sofort, oder scheint es ein Timeout zu sein

von interrupt (Gast)


Lesenswert?

Läubi .. schrieb:
> Dann scheint es ja auch kein Problem zu geben... Geh doch einfach mal
> systematisch auf Fehlersuche anstatt im Nebel zu stochern...

Es gibt SICHER ein Problem, das zeigt ja das Logfile.
Die Frage war ja auch, ob mit dem Treiber ev. nur EINE DB-Verbindung 
möglich ist, was das Verhalten ja erklären, aber auch einen anderen 
Treiber notwendig machen würde.

von interrupt (Gast)


Lesenswert?

Troll schrieb:
> Ja da war was. Ich musste damals in die Login-Daten rein schreiben (mit
> dem String, mit dem ich mich verbinde), dass ich Multiple Verbindungen
> haben will

Hast Du dazu einen Beispielstring ?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

interrupt schrieb:
> Die Frage war ja auch, ob mit dem Treiber ev. nur EINE DB-Verbindung
> möglich ist, was das Verhalten ja erklären, aber auch einen anderen
> Treiber notwendig machen würde.

Und was hält dich davon ab einfach ein Testprogramm zu schreiben welches 
deine Vermutung bestätigt? Und wie viele Alternative JDBC Treiber hast 
du den zur Verfügung/getestet?

von interrupt (Gast)


Lesenswert?

Läubi .. schrieb:
>> Die Frage war ja auch, ob mit dem Treiber ev. nur EINE DB-Verbindung
>> möglich ist, was das Verhalten ja erklären, aber auch einen anderen
>> Treiber notwendig machen würde.
>
> Und was hält dich davon ab einfach ein Testprogramm zu schreiben welches
> deine Vermutung bestätigt? Und wie viele Alternative JDBC Treiber hast
> du den zur Verfügung/getestet?

Meine begrenzte Zeit. Und weil Diskussionsforen einem den Aufwand 
ersparen sollten, das Rad immer wieder neu zu erfinden.
Alternative JDBC-Treiber habe ich noch keine getestet und zur Verfügung, 
aber es sollte wohl kein grosses Problem sein, welche herunterzuladen, 
wenn jemand einen funktionierenden kennt.
Ausserdem könnte das Thema durchaus von breiterem Interesse sein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was hältst Du davon, eine System-DSN zu konfigurieren und Dein JDBC via 
ODBC darauf zugreifen zu lassen? Dann musst Du alle 
verbindungsspezifischen Dinge nur noch bei der System-DSN einstellen, 
und nicht für Deine Java-Programme.

Obacht allerdings, den ODBC-Administrator gibt es unter x64 zweimal, in 
grenzdebiler Weise hat MS entschieden, daß System-DSNs getrennt für 
32-Bit- und für 64-Bit-Prozesse eingerichtet werden müssen.
Das dafür zuständige Programm odbcad32.exe liegt entweder unter 
%systemroot%\system32 (dann ist es logischerweise die x64-Variante) oder 
unter %systemroot%\syswow64 (dann ist es auch logischerweise die 
x86-Variante.

Im Startmenü und über die Systemsteuerung ist nur die x64-Variante zu 
finden.

von interrupt (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Was hältst Du davon, eine System-DSN zu konfigurieren und Dein JDBC via
> ODBC darauf zugreifen zu lassen?

Danke für den Hinweis, Rufus.
Habe ich schon gemacht, es handelt sich um ein 64-Bit-System, für die 
32-Bit-Programme habe ich aber auch eine System DSN ODBC-Verbindung 
eingerichtet und die funktioniert auch mit verschiedenen Programmen 
(mehrere CPP-Programme und auch ein Java-Programm, alles 
Windows-Dienste)
Da aber der Zugriff mit weiteren praktisch identisch gestrickten 
Java-Programmen nicht funktioniert, hatte ich den Verdacht, dass der 
verwendete Java-Treiber nur eine Verbindung zur Datenbank gleichzeitig 
aufbauen kann.

Bei den Java-Datenbank-Treibern gibt es ja auch vier verschiedene Typen, 
wovon nur ein Typ die ODBC-Schnittstelle nutzt.

Von welchem Typ der momentan eingesetzte Treiber

<url>jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=db_xyz;S 
electMethod=Direct;</url>

ist, konnte ich bisher noch nicht eindeutig herausfinden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

interrupt schrieb:
> Von welchem Typ der momentan eingesetzte Treiber
>
> <url>jdbc:microsoft:sqlserver://192.168.24.10:1433;DatabaseName=db_xyz;S
> electMethod=Direct;</url>
>
> ist, konnte ich bisher noch nicht eindeutig herausfinden.

Na, das wird der native Treiber für MS SQL-Server sein, ODBC nutzt das 
Ding nicht.

Würdest Du via ODBC auf eine eingerichtete System-DSN zugreifen, müsste 
Dein Verbindungsstring so aussehen:

jdbc:odbc:myDSN

(statt "myDSN" natürlich der Name Deiner System-DSN).

von Peter II (Gast)


Lesenswert?

aber über ODBC von JAVA aus zugehen ist doch unsinn. Wenn schon MS eine 
java treiber liefert sollte man ihn nutzen.

Vergiss das ODBC zeug an dieser stelle.

Finde erstemal raus ob die verbindung überhaupt zu stande kommt. Zur not 
netzwerk mitlesen. Verwende ein andere Paswort - schau ob sie die 
meldung ändert. Ändere die IP - schau was passiert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

interrupt schrieb:
> Meine begrenzte Zeit. Und weil Diskussionsforen einem den Aufwand
> ersparen sollten, das Rad immer wieder neu zu erfinden.

Es geht hier doch garnicht ums neuerfiden, sondern dass duversuchst hier 
hilfe für ein Problem zu finden was möglicherweise garnicht existiert!
Bau doch die Verbindung einfach per Hand auf, und parrallel dazu eine 
zweite dann siehst du sofort was Sache ist. Das dauert keine 5 Minuten 
und anhand der pezifischen Fehlermeldung kann man dann gerne nach einer 
Lösung fragen... aber glauben und programmieren gehört einfach nicht 
zusammen.

interrupt schrieb:
> Alternative JDBC-Treiber habe ich noch keine getestet und zur Verfügung,
> aber es sollte wohl kein grosses Problem sein, welche herunterzuladen,
> wenn jemand einen funktionierenden kennt.

sollte könnte hätte...

interrupt schrieb:
> Ausserdem könnte das Thema durchaus von breiterem Interesse sein

ja könnte... dann wäre es dir aber sicher möglich auf andere Seiten zu 
verweisen welche ein Ähnliches Problem beschreiben...

von interrupt (Gast)


Lesenswert?

Der Datenbankzugriff funktioniert jetzt, nachdem ich einen anderen 
Treiber verwende und den TCP/IP-Port 1433 für den SQL Server nochmal 
explizit freigegeben habe :


1.) Freier JTDS-Treiber von http://jtds.sourceforge.net

<driver>net.sourceforge.jtds.jdbc.Driver</driver> <!-- für 
"jtds-1.2.5-dist.jar" -->

<url>jdbc:jtds:sqlserver://localhost/db_xyz</url> <!-- für 
"jtds-1.2.5-dist.jar" url=jdbc:jtds:sqlserver://SERVER-NAME/DB-NAME -->


2.) Freigabe TPC/IP Port 1433

Start  Alle Programme  Microsoft SQL Server 2008 R2 / Configuration 
Tools  SQL Server Configuration Manager  SQL Server Network 
Configuration  Protocols for SQL xyz  TCP/IP / IP Adresses :
Bei IP1 - IP5 und IPAll  den Wert für "TCP Port" auf "1433" gesetzt


getestet mit den Java-Version jdk1.6.0.7 und jdk1.6.0.20

von Peter II (Gast)


Lesenswert?

interrupt schrieb:
> Der Datenbankzugriff funktioniert jetzt, nachdem ich einen anderen
> Treiber verwende und den TCP/IP-Port 1433 für den SQL Server nochmal
> explizit freigegeben habe :

dann wird es aber nicht im Treiber gelegen haben. War ja klar das es am 
ende etwas mit den etzwerk zu tun hat. Aus dem Grund hatte ich ja 
geschrieben du sollst mal das netzwerk mitlesen.

Der MS Treiber soll etwas besser sein, der TDS Treiber hat(te) ein 
Probme mit Datumswerten (War zumindest vor 4Jahren so).

von interrupt (Gast)


Lesenswert?

Peter II schrieb:
> Der MS Treiber soll etwas besser sein,

Von welchem MS-Treiber sprichst Du (mssqlserver.jar, sqljdbc.jar, 
sqljdbc4.jar, ...) ?
Hast Du den selbst im Einsatz ?

Bei den Treibern sqljdbc.jar UND sqljdbc4.jar kam bei mir diese Meldung 
:

"java.lang.UnsupportedOperationException: Die Java-Laufzeitumgebung 
(Java Runtime Environment, JRE), Version 1.6, wird von diesem Treiber 
nicht unterstützt. Verwenden Sie die Klassenbibliothek 'sqljdbc4.jar', 
die Unterstützung für JDBC 4.0 bietet."

von Peter II (Gast)


Lesenswert?

interrupt schrieb:
> Von welchem MS-Treiber sprichst Du (mssqlserver.jar, sqljdbc.jar,
> sqljdbc4.jar, ...) ?
> Hast Du den selbst im Einsatz ?

ich denke es war dieser hier (bzw. sein vorgänger v3)

http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774

> Hast Du den selbst im Einsatz ?
nein, bin von java geheilt. Wir verwenden jetzt c#.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.