2009-08-21 18 views
30

Sé que esta es una pregunta básica, pero parece que no puedo encontrar una respuesta y me disculpo, si esta pregunta es demasiado estúpida, pero aquí vamos:¿Cómo hacer que Java funcione con SQL Server?

Se supone que debo trabajar con SQL Server (no hay problema hasta ahora) y con Java (me encanta Java, así que no hay problema aquí tampoco), pero ahora: ¿Qué se supone que debo hacer para que la combinación funcione? que tengo: JRE 1.6 y la sqljdbc4.jar ... Antes de poner sqljdbc4.jar en mi ruta de clase que tenía sqljdbc.jar en ella y con una prueba de programa que tiene esta excepción:

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) 

Disculpe por el alemán ... Básicamente significa que debería usar sqljdbc4.jar, b/c el JRE que estoy utilizando no es compatible con el controlador. Así que puse sqljdbc4.jar en mi classpath, pero no funcionó, así que estoy un poco perdido, lo que podría hacer.

Tal vez alguien podría decir que de una manera a prueba de idiotas lo que debería hacer :(

Oh sí, aquí está el uso APPI prueba:

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(); 
     } 
    } 
}; 

Respuesta

27

Ha intentado el conductor jtds para SQL Server ??

-1
+1

No te acerques, intencionalmente o no, es bastante pobre o fue la última vez que la usé - el teórico de la conspiración en mí m Debería decir que es intencional, pero sospecho que lo simple no le dedicó suficientes recursos ... –

+1

ese es el que estoy usando :( – doro

8

no ponen tanto el antiguo y el nuevo sqljdbc.jar sqljdbc4.jar en su ruta de clase - esta voluntad hacer (más o menos) impredecible qué clases se están utilizando, si ambos JAR contienen clases con los mismos nombres calificados.

Dijiste que pusiste sqljdbc4.jar en tu classpath - ¿eliminaste el viejo sqljdbc.jar del classpath? Usted dijo "no funcionó", ¿qué significa eso exactamente? ¿Estás seguro de que todavía no tienes el JAR antiguo en tu classpath en algún lugar (quizás no explícitamente)?

+0

Creo que encontrará que cualquier jar que esté en la ruta de clase primero será favorecido (con el Sun JVM), aunque está de acuerdo, lo mejor es incluir únicamente el contenedor que realmente desea usar. –

+0

thnx para la respuesta. No lo dejé claro, lo siento, pero sí, eliminé el sqljdbc.jar del classpath y puse el sqljdbc4.jar en el classpath, pero aún recibo la misma excepción. ¿Cómo puedo ver si todavía está "no explícitamente" en el classpath? – doro

+0

Con "no explícitamente", quise decir que tal vez está ejecutando código en un servidor (Tomcat por ejemplo) y tiene el JAR en un directorio lib del servidor, o tal vez incluso en su directorio lib/ext del JRE (Los archivos JAR que hay allí se ponen automáticamente en el classpath). – Jesper

2

El controlador que está utilizando es el controlador MS SQL server 2008 (sqljdbc4.jar). Como se indica en la página de MSDN, requiere Java 6+ para funcionar.

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.

yo sugeriría utilizando el controlador 2005, que es que creo en (sqljdbc.jar) o como dice Oxbow_Lakes probar el controlador jTDS (http://jtds.sourceforge.net/).

0

Si está sqljdbc4.jar funcionamiento, utilizar el siguiente código

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

hecho. El caso es que la versión 2008 R2 es muy complicada. El controlador JTD parece funcionar en algunos casos. En cierto servidor, el jTDS funcionó bien para una instancia de R2 de 2008. En otro servidor, sin embargo, tuve que usar el controlador JBDC de Microsoft sqljdbc4.jar. Pero luego, solo funcionaría después de configurar el entorno JRE a 1.6 (o superior).

Usé 1.5 para el otro servidor, así que he dedicado mucho tiempo a esto.

Tricky issue.

2

Tal vez un poco tarde, pero utilizando diferentes conductores del todo es excesivo para un caso de error de usuario:

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

debería ser uno de estos:

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

(utilizando tubería con nombre) o :

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

utilizando el número de puerto directamente; se puede dejar de lado 1433 porque es el puerto por defecto, dejando:

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

tuve el mismo problema con un cliente de mi empresa, el problema era que el sqljdbc4.jar conductor, intentó la conversión de caracteres entre la base de datos y el conductor. Cada vez que se hizo una petición a la base de datos, ahora se puede imaginar 650 conexiones al mismo tiempo, esto hizo que mi sistem muy lento, para evitar esta situación agrego en la cadena de conexión de los siguientes parámetros:

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

Después eso, el sistema es muy rápido, ya que los usuarios están muy contentos con el cambio, espero que mi opinión sea la misma.

+0

estoy usando sqljdbc4.jar jre1.6_29 –

2

Para cualquiera que siga buscando en Google esto, vaya a \ blackboard \ config \ tomcat \ conf y en wrapper.conf ponga una línea adicional en wrapper.java.classpath apuntando a sqljdbc4.jar y luego actualice el archivo wrapper.conf.bb así

a continuación, reinicie los servicios de pizarra y Tomcat y debería funcionar

no va a funcionar, simplemente definiendo la ruta de clases de java, hay que configurarlo en los archivos de configuración de pizarra para apuntar a su archivo jar con la biblioteca jdbc

Cuestiones relacionadas