sqlserver sqljdbc4 microsoft forname for java sql-server jdbc driver sqlexception

java - sqljdbc4 - sql server 2018 jdbc driver



java.sql.SQLException: No se encontrĂ³ un controlador adecuado para jdbc: microsoft: sqlserver (4)

A continuación se muestra un código simple para leer desde la base de datos SQL. Los nombres de las bases de datos son "database1". El nombre de la tabla es "tabla1". Contiene dos columnas "uname" y "pass". No olvides agregar "sqljdbc4.jar" a tu proyecto. Descargar sqljdbc4.jar

public class NewClass { public static void main(String[] args) { Connection conn = null; String dbName = "database1"; String serverip="192.168.100.100"; String serverport="1433"; String url = "jdbc:sqlserver://"+serverip+"//SQLEXPRESS:"+serverport+";databaseName="+dbName+""; Statement stmt = null; ResultSet result = null; String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; String databaseUserName = "admin"; String databasePassword = "root"; try { Class.forName(driver).newInstance(); conn = DriverManager.getConnection(url, databaseUserName, databasePassword); stmt = conn.createStatement(); result = null; String pa,us; result = stmt.executeQuery("select * from table1 "); while (result.next()) { us=result.getString("uname"); pa = result.getString("pass"); System.out.println(us+" "+pa); } conn.close(); } catch (Exception e) { e.printStackTrace(); } } }

Obtengo esta excepción cuando intento ejecutar este programa. Es uno de los ejemplos de Microsoft. He agregado el sqljdbc4.jar al classpath en netbeans para compilar y ejecutar, a través de las propiedades del proyecto. También probé que la clase se podía encontrar utilizando una declaración de importación a continuación, sin errores durante la compilación, por lo que debe encontrar el contenedor.

¿Podría estar relacionado con un archivo dll o sql dll al que hace referencia el sqldbc4.jar?

Esta es la excepción exacta, y abajo está el código exacto, a excepción de la contraseña.

Excepción:

run: java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;databaseName=HealthCareDatabase Error Trace in getConnection() : No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;databaseName=HealthCareDatabase Error: No active Connection at java.sql.DriverManager.getConnection(DriverManager.java:602) at java.sql.DriverManager.getConnection(DriverManager.java:185) at javaapplication1.Connect.getConnection(Connect.java:35) at javaapplication1.Connect.displayDbProperties(Connect.java:50) at javaapplication1.JavaApplication1.main(JavaApplication1.java:23) BUILD SUCCESSFUL (total time: 1 second)

Código:

package javaapplication1; import com.microsoft.sqlserver.jdbc.SQLServerDriver; import java.*; public class Connect { private java.sql.Connection con = null; private final String url = "jdbc:microsoft:sqlserver://"; private final String serverName = "localhost"; private final String portNumber = "1433"; private final String databaseName = "HealthCareDatabase"; private final String userName = "larry"; private final String password = "xxxxxxx"; // Constructor public Connect() { } private String getConnectionUrl() { return url + serverName + ":" + portNumber + ";databaseName=" + databaseName ; } private java.sql.Connection getConnection() { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password); if (con != null) { System.out.println("Connection Successful!"); } } catch (Exception e) { e.printStackTrace(); System.out.println("Error Trace in getConnection() : " + e.getMessage()); } return con; } public void displayDbProperties() { java.sql.DatabaseMetaData dm = null; java.sql.ResultSet rs = null; try { con = this.getConnection(); if (con != null) { dm = con.getMetaData(); System.out.println("Driver Information"); System.out.println("/tDriver Name: " + dm.getDriverName()); System.out.println("/tDriver Version: " + dm.getDriverVersion()); System.out.println("/nDatabase Information "); System.out.println("/tDatabase Name: " + dm.getDatabaseProductName()); System.out.println("/tDatabase Version: " + dm.getDatabaseProductVersion()); System.out.println("Avalilable Catalogs "); rs = dm.getCatalogs(); while (rs.next()) { System.out.println("/tcatalog: " + rs.getString(1)); } rs.close(); rs = null; closeConnection(); } else { System.out.println("Error: No active Connection"); } } catch (Exception e) { e.printStackTrace(); } dm = null; } private void closeConnection() { try { if (con != null) { con.close(); } con = null; } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Connect myDbTest = new Connect(); myDbTest.displayDbProperties(); }

}


Estaba teniendo el mismo error, pero tenía una cadena de conexión adecuada. Mi problema era que el controlador no se estaba utilizando, por lo tanto, se optimizó fuera de la guerra compilada.

Asegúrese de importar el controlador:

import com.microsoft.sqlserver.jdbc.SQLServerDriver;

Y luego para obligarlo a ser incluido en la guerra final, puedes hacer algo como esto:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Esa línea está en la pregunta original. Esto también funcionará:

SQLServerDriver driver = new SQLServerDriver();


Puede intentar lo siguiente con sqljdbc4-2.0.jar:

public void getConnection() throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); String url = "jdbc:sqlserver://<SERVER_IP>:<PORT_NO>;databaseName=" + DATABASE_NAME; Connection conn = DriverManager.getConnection(url, USERNAME, PASSWORD); System.out.println("DB Connection started"); Statement sta = conn.createStatement(); String Sql = "select * from TABLE_NAME"; ResultSet rs = sta.executeQuery(Sql); while (rs.next()) { System.out.println(rs.getString("COLUMN_NAME")); } }