Creación de la dirección URL de conexión

Descargar controlador JDBC

El formato general de la URL de conexión es

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

donde:

  • jdbc:sqlserver:// (obligatorio): es el subprotocolo y es constante.

  • serverName (opcional): es la dirección del servidor con el que se establece la conexión. Esta dirección puede ser un DNS o una dirección IP, o bien localhost o 127.0.0.1 para el equipo local. Si no se especifica en la URL de conexión, es necesario especificar el nombre del servidor en la colección de propiedades.

  • instanceName (opcional): es la instancia para establecer la conexión con serverName. Si no se especifica, se establece una conexión con la instancia predeterminada.

  • portNumber (opcional) es el puerto para establecer la conexión con serverName. El valor predeterminado es 1433. Si usa el puerto predeterminado, no es necesario especificar el puerto ni el : precedente en la dirección URL.

    Nota:

    Para obtener un rendimiento óptimo de la conexión, debe establecer el valor de portNumber al conectar con una instancia con nombre. De este modo se evita un ciclo de ida y vuelta en el servidor para determinar el número de puerto. Si se usan y portNumber y instanceName, portNumber tendrá prioridad y instanceName se omitirá.

  • property (opcional): es una o más propiedades de conexión de la opción. Para obtener más información, vea Establecimiento de las propiedades de conexión. Se puede especificar cualquier propiedad de la lista. Las propiedades solo se pueden delimitar mediante punto y coma (;) y no se pueden duplicar.

Precaución

Por motivos de seguridad, debe evitar la generación de direcciones URL de conexión basadas en la entrada del usuario. Debe especificar solo el nombre del servidor y el controlador de la URL. Para los valores de nombre y contraseña, utilice las colecciones de propiedades de conexión. Para obtener más información acerca de la seguridad de las aplicaciones JDBC, consulte Proteger las aplicaciones del controlador JDBC.

Propiedades de la conexión

Para obtener una lista detallada de las propiedades que se pueden establecer en la cadena de conexión, vea Establecimiento de las propiedades de conexión.

Ejemplos de conexión

Conexión a la base de datos predeterminada del equipo local con un nombre de usuario y una contraseña:

jdbc:sqlserver://localhost;encrypt=true;user=MyUserName;password=*****;

Nota:

Aunque en el ejemplo anterior se usan un nombre de usuario y una contraseña en la cadena de conexión, debe usar la seguridad integrada dado que resulta más seguro. Para más información, vea la sección Conexión con la autenticación integrada más adelante en este tema.

La siguiente cadena de conexión muestra un ejemplo de cómo realizar la conexión a una base de datos de SQL Server con una autenticación integrada y Kerberos desde una aplicación que se ejecuta en cualquier sistema operativo compatible con Microsoft JDBC Driver para SQL Server:

jdbc:sqlserver://;servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos
  • Conexión con la base de datos predeterminada del equipo local con autenticación integrada:

    jdbc:sqlserver://localhost;encrypt=true;integratedSecurity=true;

  • Conexión a la base de datos con nombre de un servidor remoto:

    jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;

  • Conexión en el puerto predeterminado con el servidor remoto:

    jdbc:sqlserver://localhost:1433;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;

  • Conectar mediante la especificación de un nombre de aplicación personalizada:

    jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;

Instancias de SQL Server múltiples y con nombre

SQL Server permite la instalación de varias instancias de base de datos por servidor. Cada instancia se identifica con un nombre concreto. Para conectarse a una instancia con nombre de SQL Server, puede especificar el número de puerto de la instancia con nombre (opción preferida). También puede especificar el nombre de instancia como una propiedad URL de JDBC o una propiedad de origen de datos. Si no se especifica ningún nombre de instancia o propiedad de número de puerto, se crea una conexión a la instancia predeterminada. Consulte los siguientes ejemplos:

  • Para especificar un número de puerto, use el formato siguiente:

    jdbc:sqlserver://localhost:1433;encrypt=true;integratedSecurity=true;<more properties as required>;

  • Para usar una propiedad URL de JDBC, use el formato siguiente:

    jdbc:sqlserver://localhost;encrypt=true;instanceName=instance1;integratedSecurity=true;<more properties as required>;

Escape de valores en la dirección URL de conexión

Es posible que tenga que aplicar escape a determinadas partes de los valores de la URL si incluyen caracteres especiales como espacios, puntos y comas, y comillas. Para admitir el escape de estos caracteres, el controlador JDBC los incluye entre llaves. Por ejemplo, {;} aplica el escape al punto y coma.

Antes de la versión 8.4, los valores con escape pueden contener caracteres especiales (sobre todo =, ;, [] y espacio), pero no llaves. Los valores a los que se debe aplicar el escape y contengan llaves se deben agregar a la colección de propiedades.

En la versión 8.4 y posteriores, los valores con escape pueden contener caracteres especiales, incluidas las llaves. Pero se debe aplicar escape a las llaves de cierre. Por ejemplo, con una contraseña de pass";{}word, una cadena de conexión tendría que aplicarle escape como se muestra a continuación:

jdbc:sqlserver://localhost;encrypt=true;username=MyUsername;password={pass";{}}word};

Nota

El espacio en blanco dentro de las llaves es literal y no se reduce.

Conexión con autenticación integrada en Windows

El controlador JDBC admite el uso de la autenticación integrada de tipo 2 en los sistemas operativos Windows mediante la propiedad de cadena de conexión integratedSecurity. Para usar la autenticación integrada, copie el archivo mssql-jdbc_auth-<version>-<arch>.dll en un directorio de la ruta del sistema de Windows en que esté instalado el controlador JDBC.

Los archivos de mssql-jdbc_auth-<version>-<arch>.dll se instalan en la ubicación siguiente:

<installation directory>\sqljdbc_<version>\<language>\auth\

Para cualquier sistema operativo compatible con Microsoft JDBC Driver para SQL Server, consulte Empleo de autenticación integrada de Kerberos para conectar con SQL Server para obtener una descripción de una característica agregada en Microsoft JDBC Driver 4.0 para SQL Server que permita a una aplicación conectarse a una base de datos con la autenticación integrada con Kerberos de tipo 4.

Nota:

Si ejecuta una máquina virtual Java (JVM) de 32 bits, utilice el archivo mssql-jdbc_auth-<version>-<arch>.dll de la carpeta x86, incluso si la versión del sistema operativo es la x64. Si ejecuta una JVM de 64 bits en un procesador x64, utilice el archivo mssql-jdbc_auth-<version>-<arch>.dll de la carpeta x64.

También puede especificar la propiedad del sistema java.libary.path para especificar el directorio de mssql-jdbc_auth-<version>-<arch>.dll. Por ejemplo, si el controlador JDBC está instalado en el directorio predeterminado, puede especificar la ubicación de la DLL con el siguiente argumento de máquina virtual (VM) si la aplicación de Java se ha iniciado:

-Djava.library.path=C:\Microsoft JDBC Driver 6.4 for SQL Server\sqljdbc_<version>\enu\auth\x86

Conectar con direcciones IPv6

El controlador JDBC admite el uso de direcciones IPv6 con la colección de propiedades de conexión y con la propiedad de cadena de conexión serverName. El valor serverName inicial, como jdbc:sqlserver://serverName, no se admite para las direcciones IPv6 de las cadenas de conexión. El uso de un nombre para serverName en lugar de una dirección IPv6 sin formato funciona en todos los casos en la conexión. En los siguientes ejemplos se proporciona más información.

  • Para usar la propiedad serverName:

    jdbc:sqlserver://;serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1;encrypt=true;integratedSecurity=true;

  • Para usar la colección de propiedades:

    Properties pro = new Properties();

    pro.setProperty("serverName", "serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1");

    Connection con = DriverManager.getConnection("jdbc:sqlserver://;encrypt=true;integratedSecurity=true;", pro);

Consulte también