Verbindung zu Datenbank herstellen

jojo14

Grünschnabel
Hallo zusammen,

ich bin neu in der Community und habe erste Erfahrungen mit Java.

Ich versuche eine Verbindung von meiner Java-Applikation zu einer Microsoft SQL Server 2008 R2-Datenbank herzustellen.

Meine Entwicklungsumgebung ist Eclipse. Das Betriebssystem auf dem Rechner ist Windows XP.

Habe bisher den "Microsoft SQL Server JDBC Driver 2.0" bis "4.0" geladen und jeweils die beiden .jar-Dateien (also insgesamt nun 6) unter "Configure Build Path" und "Add External Jar2 eingefügt.

Habe nun folgenden Code:

Java:
package de.javatest.Database;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DatabaseConnection {

	public static void main(String[] args) throws Exception {
		
	    Connection con = null;	
	    Statement stmt = null;	
	    ResultSet rs = null;
	    Context ctx = new InitialContext();

	    try 
	    {
	    	DataSource ds = (DataSource)ctx.lookup("JOGO-WRK01\\SQLEXPRESS"); //Servername der Datenbank
	    	con = ds.getConnection();
	    	
	    	String sqlabfrage = "SELECT * FROM Log"; //Log = Tabellenname 
	        stmt = con.createStatement();
	        rs = stmt.executeQuery(sqlabfrage);
	        
	        while (rs.next()) 
	            System.out.println(rs.getString("ID") + " " + rs.getString("Status") + " " + rs.getString("Zeit") + " " + rs.getString("Port"));	
	    }
	    finally
	    {
	    	if(con != null)
	    		try {con.close();} catch (SQLException ex) {ex.printStackTrace();}
	        }	
	}
}

Ich erhalte nun folgende Fehlermeldung auf der Konsole:

Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at de.javatest.Database.DatabaseConnection.main(DatabaseConnection.java:23)


Zeile 23 ist die, die mit DataSource beginnt.


Hoffe mir kann jemand helfen

Gruß Joe
 
Zuletzt bearbeitet von einem Moderator:
Hab die Verbindung über DataSource nicht herstellen können. Habe jetzt einen anderen Ansatz gewählt über den DriverManager.
Java:
package de.javatest.Database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseConnection2 {

	public static void main(String[] args) throws Exception {
		
	    Connection con = null;	
	    Statement stmt = null;	
	    ResultSet rs = null;
	    
	    String connectionUrl = "jdbc:sqlserver://JOGO-WRK01\\SQLEXPRESS;" + "databaseName=BA;user=JoGo;password=Test1234%"; 
	                                                                           
	    try 
	    {
	        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	        con = DriverManager.getConnection(connectionUrl);

	    	
	    	String sqlabfrage = "SELECT * FROM Log"; //Log = Tabellenname 
	        stmt = con.createStatement();
	        rs = stmt.executeQuery(sqlabfrage);
	        
	        while (rs.next()) 
	            System.out.println(rs.getString("ID") + " " + rs.getString("Status") + " " + rs.getString("Zeit") + " " + rs.getString("Port"));	
	    }
	    finally
	    {
	    	if(con != null)
	    		try {con.close();} catch (SQLException ex) {ex.printStackTrace();}
	        }	
	}
}

Ich erhalte aber ebenfalls eine Fehlermeldung in der Konsole:

20.08.2012 10:31:39 com.microsoft.sqlserver.jdbc.SQLServerConnection <init>
SCHWERWIEGEND: 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.
Exception in thread "main" 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.
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.<init>(SQLServerConnection.java:238)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at de.javatest.Database.DatabaseConnection2.main(DatabaseConnection2.java:22)

Danke schonmal

Grüße Joe

Habe nach wie vor im BuildPath die jar-Dateien liegen. Allerdings nur noch die sdljdbc4.jar aus Microsoft SQL Server JDBC Driver 4.0
 
Zuletzt bearbeitet von einem Moderator:
steht da doch klar und deutlich, dein treiber ist nicht mehr kompatibel.

hier hab ich mal was aus nem projekt wo ich was mit datenbanken zu tun hatte ausgeschnitten, vllt kannse damit was anfangen

Java:
import java.sql.DriverManager;
import java.io.IOException;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCConnector{

	Connection con = null;

	public JDBCConnector() {

		try {
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	}

	public void insert(/*some inuput data */) {
		open();
		PreparedStatement pstmt = null;
		try {
			//some query on pstmt with input data
		} catch (SQLException e) {
			e.printStackTrace();
		}
		close();
	}

	@Override
	public boolean isOpen() {
		try {
			return !con.isClosed();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public void close() {
		if (isOpen())
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}

	@Override
	public void open() {
		try {
			if(!isOpen())
				con = DriverManager.getConnection(/*url, user, password*/ "","","");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
 
Zuletzt bearbeitet:
Ja das mein Treiber nicht funktioniert oder nicht benutzt wird ist klar. Nur es muss doch einen Weg geben diesen einzubinden. Bin der Fehlermeldung nachgegangen habe den entsprechenden Treiber aus dem Internet geladen und in die Build Path eingefügt. Habe auch über den jtds-Treiber versucht die Verbindung aufzubauen. Leider nach wie vor mit der gleichen Fehlermeldung.
 
Hab jedenfalls alle möglichen jetzt ausprobiert.
Wenn ich die jar-Dateien unter Build Path und Add External JARs einfüge ändert sich auch immer etwas in dieser CLASSPATH-Datei.
Scheint so als würde Eclipse das automatisch machen.

Vielleicht ist auch an meinem Code etwas fehlerhaft ?
 
Eine andere Möglichkeit ist vielleicht eine falsche Java/Eclipse-Version.
Mich wundert, dass die ganzen Hilfestellungen bislang keinen Erfolg haben. Wo doch in einigen Foren die gleichen Tipps offensichtlich zum Erfolg führen.

Hab JavaSE-1.6 (JDK 6)
Eclipse IDE for Java Developers 3.7 (Indigo)
...
und zusätzlich noch Android SDK, die in diesem Projekt allerdings überflüssig und nicht entscheidend sein wird.


Vielleicht fehlen mir irgendwelche Zusätze.

Hab auch teilweise was von nem SQL-Explorer usw. gelesen...
oder die Java Enterprise Edition...


Danke
Gruß Joe
 
Ok danke :)

Der mittlere Download:

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

Code:
Java:
package de.javatest.Database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseConnection2 {

	public static void main(String[] args) throws Exception {
		
	    Connection con = null;	
	    Statement stmt = null;	
	    ResultSet rs = null;
	    
	    String connectionUrl = "jdbc:sqlserver://JOGO-WRK01\\SQLEXPRESS:1433;" + "databaseName=BA;user=JoGo;password=Test1234%"; 
	                                                                           
	    try 
	    {
	        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	        con = DriverManager.getConnection(connectionUrl);

	    	
	    	String sqlabfrage = "SELECT * FROM Log"; //Log = Tabellenname 
	        stmt = con.createStatement();
	        rs = stmt.executeQuery(sqlabfrage);
	        
	        while (rs.next()) 
	            System.out.println(rs.getString("ID") + " " + rs.getString("Status") + " " + rs.getString("Zeit") + " " + rs.getString("Port"));	
	    }
	    finally
	    {
	    	if(con != null)
	    		try {con.close();} catch (SQLException ex) {ex.printStackTrace();}
	        }	
	}
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück