java.sql.SQLException:找不到适合jdbc的驱动程序:mysql:// localhost:3306 / dbname
我有这个Java程序: MySQLConnectExample.java
import java.sql.*; import java.util.Properties; public class MySQLConnectExample { public static void main(String[] args) { Connection conn1 = null; Connection conn2 = null; Connection conn3 = null; try { String url1 = "jdbc:mysql://localhost:3306/aavikme"; String user = "root"; String password = "aa"; conn1 = DriverManager.getConnection(url1, user, password); if (conn1 != null) System.out.println("Connected to the database test1"); String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa"; conn2 = DriverManager.getConnection(url2); if (conn2 != null) { System.out.println("Connected to the database test2"); } String url3 = "jdbc:mysql://localhost:3306/aavikme"; Properties info = new Properties(); info.put("user", "root"); info.put("password", "aa"); conn3 = DriverManager.getConnection(url3, info); if (conn3 != null) { System.out.println("Connected to the database test3"); } } catch (SQLException ex) { System.out.println("An error occurred. Maybe user/password is invalid"); ex.printStackTrace(); } } }
我这样编译它:
E:\java mysql code driver>javac MySQLConnectExample.java E:\java mysql code driver>java -cp mysql-connector-java-3.0.11-stable-bin.jar;. MySQLConnectExample
我得到这个错误:
An error occurred. Maybe user/password is invalid java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/ aavikme at java.sql.DriverManager.getConnection(DriverManager.java:596) at java.sql.DriverManager.getConnection(DriverManager.java:215) at MySQLConnectExample.main(MySQLConnectExample.java:20)
我究竟做错了什么?
确保你先运行这个:
Class.forName("com.mysql.jdbc.Driver");
这迫使驱动程序自己注册,以便Java知道如何处理这些数据库连接string。
有关更多信息,请参阅MySQL连接器参考 。
你必须加载jdbc driver
。 考虑下面的代码。
try { Class.forName("com.mysql.jdbc.Driver"); // connect way #1 String url1 = "jdbc:mysql://localhost:3306/aavikme"; String user = "root"; String password = "aa"; conn1 = DriverManager.getConnection(url1, user, password); if (conn1 != null) { System.out.println("Connected to the database test1"); } // connect way #2 String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa"; conn2 = DriverManager.getConnection(url2); if (conn2 != null) { System.out.println("Connected to the database test2"); } // connect way #3 String url3 = "jdbc:mysql://localhost:3306/aavikme"; Properties info = new Properties(); info.put("user", "root"); info.put("password", "aa"); conn3 = DriverManager.getConnection(url3, info); if (conn3 != null) { System.out.println("Connected to the database test3"); } } catch (SQLException ex) { System.out.println("An error occurred. Maybe user/password is invalid"); ex.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
从具有列column1,column2,column3,column4,cloumn1和2的表检索数据的示例保存int值,列3和4保存varchar(10)
import java.sql.*; // need to import this as the STEP 1. Has the classes that you mentioned public class JDBCexample { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://LocalHost:3306/databaseNameHere"; // DON'T PUT ANY SPACES IN BETWEEN and give the name of the database (case insensitive) // database credentials static final String USER = "root"; // usually when you install MySQL, it logs in as root static final String PASS = ""; // and the default password is blank public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { // registering the driver__STEP 2 Class.forName("com.mysql.jdbc.Driver"); // returns a Class object of com.mysql.jdbc.Driver // (forName(""); initializes the class passed to it as String) ie initializing the // "suitable" driver System.out.println("connecting to the database"); // opening a connection__STEP 3 conn = DriverManager.getConnection(DB_URL, USER, PASS); // executing a query__STEP 4 System.out.println("creating a statement.."); stmt = conn.createStatement(); // creating an object to create statements in SQL String sql; sql = "SELECT column1, cloumn2, column3, column4 from jdbcTest;"; // this is what you would have typed in CLI for MySQL ResultSet rs = stmt.executeQuery(sql); // executing the query__STEP 5 (and retrieving the results in an object of ResultSet) // extracting data from result set while(rs.next()){ // retrieve by column name int value1 = rs.getInt("column1"); int value2 = rs.getInt("column2"); String value3 = rs.getString("column3"); String value4 = rs.getString("columnm4"); // displaying values: System.out.println("column1 "+ value1); System.out.println("column2 "+ value2); System.out.println("column3 "+ value3); System.out.println("column4 "+ value4); } // cleaning up__STEP 6 rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { // handle sql exception e.printStackTrace(); }catch (Exception e) { // TODO: handle exception for class.forName e.printStackTrace(); }finally{ //closing the resources..STEP 7 try { if (stmt != null) stmt.close(); } catch (SQLException e2) { e2.printStackTrace(); }try { if (conn != null) { conn.close(); } } catch (SQLException e2) { e2.printStackTrace(); } } System.out.println("good bye"); } }
您可能没有将MySQL connector/J
jar文件复制到lib文件夹中,然后该文件必须位于类path中。
如果你还没有这样做,请告诉我,我将详细说明答案
在你的代码中你缺lessClass.forName("com.mysql.jdbc.Driver");
这就是你所缺less的一切工作。
我有同样的问题,我的代码如下:
private Connection conn = DriverManager.getConnection(Constant.MYSQL_URL, Constant.MYSQL_USER, Constant.MYSQL_PASSWORD); private Statement stmt = conn.createStatement();
我没有加载驱动类,但我可以在本地工作,我可以从MySQL查询结果,但是,我不工作时,我部署到Tomcat,并ocurrs下面的错误:
No suitable driver found for jdbc:mysql://172.16.41.54:3306/eduCloud
所以当我看到这个页面的问题的答案时,我加载驱动程序类如下所示:
Class.forName("com.mysql.jdbc.Driver");
它现在工作! 我不知道为什么它在当地运作良好,我需要你的帮助,非常感谢你!
这里的所有答案都使用Class.forName("my.vandor.Driver");
行来加载驱动程序。
作为一个(更好的)select,您可以使用DriverManager
帮助程序类,它提供了一些方法来处理您的JDBC驱动程序。
你可能想要
- 使用
DriverManager.registerDriver(driverObject);
注册你的驱动程序到它的驱动程序列表
使用DriverManager注册给定的驱动程序。 新加载的驱动程序类应该调用方法registerDriver以使其自己知道DriverManager。 如果驾驶员当前注册,则不采取任何行动
- 使用
DriverManager.deregisterDriver(driverObject);
将其删除。
从DriverManager的注册驱动程序列表中删除指定的驱动程序。
例:
Driver driver = new oracle.jdbc.OracleDriver(); DriverManager.registerDriver(driver); Connection conn = DriverManager.getConnection(url, user, password); // ... // and when you don't need anything else from the driver DriverManager.deregisterDriver(driver);
或者更好,使用一个数据源
尝试这个
String url = "jdbc:mysql://localhost:3306/<dbname>"; String user = "<username>"; String password = "<password>"; conn = DriverManager.getConnection(url, user, password);
我有一个类似的问题,只是validation你的Mysql服务器运行的端口,这将解决问题
例如,我的代码是:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8080/bddventas","root","");
我改变string
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bddventas","root","");
瞧,这工作,因为我的服务器在该端口上运行
希望这个帮助