2009-08-21 18 views
30

So che questa è una domanda di base, ma non riesco a trovare una risposta e mi scuso, se questa domanda è troppo stupida, ma eccoci:Come far funzionare Java con SQL Server?

Devo lavorare con SQL Server (nessun problema finora) e con Java (amore java, quindi nessun problema neanche qui), ma ora: cosa dovrei fare per far funzionare la combinazione? ho ottenuto: JRE 1.6 e la sqljdbc4.jar ... Prima ho messo sqljdbc4.jar nel mio percorso di classe avevo sqljdbc.jar in esso e con un test-programma che ho ottenuto questa eccezione:

21.08.2009 09:26:59 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. 
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:223) 
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:840) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at msSqlTest.DB.dbConnect(DB.java:13) 
    at msSqlTest.TestConnection.main(TestConnection.java:7) 

Ci scusiamo per il tedesco ... Fondamentalmente significa che dovrei usare sqljdbc4.jar, b/c il JRE che sto usando non è supportato dal driver. Quindi ho inserito sqljdbc4.jar nel mio classpath, ma non ha funzionato, quindi sono un po 'perso, cosa potrei fare.

Forse qualcuno potrebbe dire in un modo a prova di idiota che cosa devo fare :(

Oh sì, qui è l'uso di test Appi:

import java.sql.*; 

public class TestConnection{ 
    public static void main(String[] args){ 
     // Neue DB und los geht's :) 
     DB db = new DB(); 
     db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw"); 
    } 
} 

class DB{ 
    public void dbConnect( String db_connect_string, 
          String db_userid, 
          String db_password){ 
     try{ 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection conn = DriverManager.getConnection(
          db_connect_string, 
         db_userid, 
         db_password); 
      System.out.println("connected"); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
}; 

risposta

27

Hai provato il driver jtds per SQLServer ??

-1
+1

Non avvicinarti, intenzionalmente o no, è piuttosto scadente o è stata l'ultima volta che l'ho usato - il teorico della cospirazione in me Direi che è intenzionale ma sospetto che non abbiano dedicato abbastanza risorse a questo ... –

+1

quello è quello che sto usando :( – doro

8

non mettere sia il vecchio e il nuovo sqljdbc.jar sqljdbc4.jar nel classpath - questa volontà renderlo (più o meno) imprevedibile quali classi vengono utilizzate, se entrambi questi JAR contengono classi con gli stessi nomi qualificati.

Hai detto di mettere sqljdbc4.jar nel classpath - hai rimosso il vecchio sqljdbc.jar dal classpath? Hai detto "non ha funzionato", cosa significa esattamente? Sei sicuro di non avere ancora il vecchio JAR nel tuo classpath da qualche parte (forse non esplicitamente)?

+0

Penso che scoprirai che qualunque jar sia nel classpath per primo sarà favorito (con il Sun JVM), sebbene concordato, è meglio includere solo il jar che si desidera effettivamente utilizzare. –

+0

thnx per la risposta. Non l'ho chiarito, mi dispiace, ma sì, ho rimosso sqljdbc.jar dal classpath e ho inserito sqljdbc4.jar nel classpath, ma ottengo comunque la stessa eccezione. Come posso vedere se è ancora "non esplicitamente" nel classpath? – doro

+0

Con "non esplicitamente", intendevo dire che forse stai eseguendo il codice su un server (Tomcat per esempio) e hai il JAR in una directory lib del server, o forse è anche nella tua directory lib/ext del JRE (I file JAR presenti vengono automaticamente inseriti nel classpath). – Jesper

2

Il driver in uso è il driver MS SQL Server 2008 (sqljdbc4.jar). Come affermato nella pagina MSDN, richiede Java 6+ per funzionare.

http://msdn.microsoft.com/en-us/library/ms378526.aspx

sqljdbc4.jar class library requires a Java Runtime Environment (JRE) of version 6.0 or later.

Io suggerirei usando il driver 2005, che ho beleive è (sqljdbc.jar) o come dice Oxbow_Lakes provare il driver jTDS (http://jtds.sourceforge.net/).

0

Se siete uso sqljdbc4.jar, utilizzare il seguente codice

ResultSet objResultSet = objPreparedStatement.getResultSet(); 
if (objResultSet == null) { 
    boolean bResult = false; 
    while (!bResult){ 
    if (objPreparedStatement.getMoreResults()){ 
     objResultSet = objPreparedStatement.getResultSet(); 
     bResult = true; 
    } 
    } 
} 
objCachedRowSet = new CachedRowSetImpl(); 
objCachedRowSet.populate(objResultSet); 
if (CommonUtility.isValidObject(objResultSet)) objResultSet.close(); 
objResultSet = null; 
0

Infatti. Il fatto è che la versione R2 2008 è molto complicata. Il driver JTD sembra funzionare su alcuni casi. In un determinato server, jTDS ha funzionato correttamente per un'istanza R2 2008. In un altro server, però, ho dovuto usare il driver JBDC di Microsoft sqljdbc4.jar. Ma poi, funzionerebbe solo dopo aver impostato l'ambiente JRE a 1.6 (o superiore).

Ho usato 1.5 per l'altro server, quindi mi ci ho messo molto tempo.

Problema ingannevole.

2

Forse un po 'tardi, ma utilizzando diversi driver del tutto è eccessivo per un caso di errore dell'utente:

db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw"); 

dovrebbe essere uno di questi:

db.dbConnect("jdbc:sqlserver://localhost\muff", "user", "pw"); 

(utilizzando named pipe) o :

db.dbConnect("jdbc:sqlserver://localhost:1433", "user", "pw"); 

utilizzando il numero di porta direttamente; si può tralasciare 1433 perché è la porta di default, lasciando:

db.dbConnect("jdbc:sqlserver://localhost", "user", "pw"); 
1

Ho avuto lo stesso problema con un cliente della mia azienda, il problema era che lo sqljdbc4.jar conducente, prova conversione di carattere tra il database e l'autista. Ogni volta che lo ha fatto una richiesta al database, ora si può immaginare 650 connessioni contemporaneamente, questo ha fatto il mio sistem molto molto lento, per evitare questa situazione aggiungo alla stringa di collegamento il seguente parametro:

SendStringParametersAsUnicode=false, then te connection must be something like url="jdbc:sqlserver://IP:PORT;DatabaseName=DBNAME;SendStringParametersAsUnicode=false" 

Dopo che, il sistema è molto molto veloce, dato che gli utenti sono molto contenti del cambiamento, spero che il mio contributo sia lo stesso.

+0

sto usando sqljdbc4.jar jre1.6_29 –

2

Per tutti gli utenti che effettuano ricerche su google, andare su \ blackboard \ config \ tomcat \ conf e in wrapper.conf inserire una riga aggiuntiva in wrapper.java.classpath che punta a sqljdbc4.jar e quindi aggiornare il wrapper.conf.bb così

quindi riavviare i servizi lavagna e Tomcat e dovrebbe funzionare

non funziona semplicemente impostando il percorso di classe Java, è necessario configurarlo nel file di configurazione lavagna per puntare al file jar con la libreria jdbc

Problemi correlati