java.sql.SQLException:没有为jdbc找到合适的驱动程序:mysql:// localhost:3306 / dbname

时间:2014-03-13 16:19:11

标签: java mysql sql jdbc connectivity

我有这个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)

我做错了什么?

9 个答案:

答案 0 :(得分:66)

请务必先运行此功能:

Class.forName("com.mysql.jdbc.Driver");

这会强制驱动程序自行注册,以便Java知道如何处理这些数据库连接字符串。

有关详细信息,请参阅MySQL Connector reference

答案 1 :(得分:10)

您必须加载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();
   }

答案 2 :(得分:5)

从具有列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) i.e 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");
    }
}

答案 3 :(得分:4)

您可能没有将MySQL connector/J jar文件复制到lib文件夹中,然后此文件必须存在于类路径中。

如果您还没有这样做,请告诉我,我将详细说明答案

答案 4 :(得分:4)

我遇到了同样的问题,我的代码如下:

private Connection conn = DriverManager.getConnection(Constant.MYSQL_URL, Constant.MYSQL_USER, Constant.MYSQL_PASSWORD);
private Statement stmt = conn.createStatement();

我没有加载驱动程序类,但它在本地工作,我可以从MySQL查询结果,但是,当我将它部署到Tomcat时它不起作用,并且发生以下错误:

No suitable driver found for jdbc:mysql://172.16.41.54:3306/eduCloud

所以当我看到其他答案时,我加载了驱动程序类,如下所示:

Class.forName("com.mysql.jdbc.Driver");

现在有效!我不知道为什么它在当地运作良好,我需要你的帮助,非常感谢你!

答案 5 :(得分:2)

在您的代码中,您缺少%.2f

这是让一切正常运作所缺少的。

答案 6 :(得分:1)

此处的所有答案都使用Class.forName("my.vandor.Driver");行来加载驱动程序。

作为(更好的)替代方案,您可以使用DriverManager帮助程序类,它为您提供了一些处理JDBC驱动程序的方法。

你可能想要

  1. 使用DriverManager.registerDriver(driverObject);将驱动程序注册到驱动程序列表
  2.   

    使用DriverManager注册给定的驱动程序。新加载的驱动程序类应调用方法registerDriver使其自身为DriverManager所知。如果驱动程序当前已注册,则不执行任何操作

    1. 使用DriverManager.deregisterDriver(driverObject);将其删除。
    2.   

      从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);
      

      或者更好的是,使用DataSource

答案 7 :(得分:-1)

试试这个

String url = "jdbc:mysql://localhost:3306/<dbname>";
String user = "<username>";
String password = "<password>";
conn = DriverManager.getConnection(url, user, password); 

答案 8 :(得分:-2)

我遇到了类似的问题,只需验证运行Mysql服务器的端口,即可解决问题

例如,我的代码是:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8080/bddventas","root","");

我将字符串更改为

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bddventas","root","");

并且瞧!!,这是因为我的服务器在该端口上运行

希望这个帮助