java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/dbname 的驱动程序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22384710/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/dbname
提问by user3416261
I have this Java program: MySQLConnectExample.java
我有这个 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();
}
}
}
I compile it like this:
我是这样编译的:
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
I get this error:
我收到此错误:
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)
What am I doing wrong?
我究竟做错了什么?
回答by Adam Batkin
Make sure you run this first:
确保你先运行这个:
Class.forName("com.mysql.jdbc.Driver");
This forces the driver to register itself, so that Java knows how to handle those database connection strings.
这会强制驱动程序自行注册,以便 Java 知道如何处理这些数据库连接字符串。
For more information, see the MySQL Connector reference.
有关更多信息,请参阅MySQL 连接器参考。
回答by unknown
You have to load jdbc driver
. Consider below Code.
你必须加载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();
}
回答by dresh
An example of retrieving data from a table having columns column1, column2 ,column3 column4, cloumn1 and 2 hold int values and column 3 and 4 hold varchar(10)
从具有列 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");
}
}
回答by inquisitive
You might have not copied the MySQL connector/J
jar file into the lib folder and then this file has to be there in the classpath.
您可能没有将MySQL connector/J
jar 文件复制到 lib 文件夹中,然后该文件必须在类路径中。
If you have not done so, please let me know I shall elaborate the answer
如果你还没有这样做,请让我知道我会详细说明答案
回答by Karue Benson Karue
In your code you are missing Class.forName("com.mysql.jdbc.Driver");
在您的代码中,您缺少 Class.forName("com.mysql.jdbc.Driver");
This is what you are missing to have everything working.
这是让一切正常工作所缺少的。
回答by Deathcore Ortega
I had a similar problem, just verify the port where your Mysql server is running, that will solve the problem
我遇到了类似的问题,只需验证您的Mysql服务器运行的端口,即可解决问题
For example, my code was:
例如,我的代码是:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8080/bddventas","root","");
i change the string to
我将字符串更改为
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bddventas","root","");
and voila!!, this workd because my server was running on that port
瞧!!,这是可行的,因为我的服务器正在该端口上运行
Hope this help
希望这有帮助
回答by Hari Nair
try this
尝试这个
String url = "jdbc:mysql://localhost:3306/<dbname>";
String user = "<username>";
String password = "<password>";
conn = DriverManager.getConnection(url, user, password);
回答by StrongYoung
I had the same problem, my code is below:
我遇到了同样的问题,我的代码如下:
private Connection conn = DriverManager.getConnection(Constant.MYSQL_URL, Constant.MYSQL_USER, Constant.MYSQL_PASSWORD);
private Statement stmt = conn.createStatement();
I have not loaded the driver class, but it works locally, I can query the results from MySQL, however, it does not work when I deploy it to Tomcat, and the errors below occur:
我没有加载驱动类,但是在本地是可以的,可以从MySQL中查询结果,但是部署到Tomcat时就不行了,出现如下错误:
No suitable driver found for jdbc:mysql://172.16.41.54:3306/eduCloud
so I loaded the driver class, as below, when I saw other answers posted:
所以当我看到其他答案发布时,我加载了驱动程序类,如下所示:
Class.forName("com.mysql.jdbc.Driver");
It works now! I don't know why it works well locally, I need your help, thank you so much!
它现在有效!我不知道为什么它在本地运行良好,我需要您的帮助,非常感谢!
回答by svarog
All of the answers here use the Class.forName("my.vandor.Driver");
line to load the driver.
这里的所有答案都使用该Class.forName("my.vandor.Driver");
行来加载驱动程序。
As an (better) alternative you can use the DriverManager
helper class which provides you with a handful of methods to handle your JDBC driver/s.
作为(更好的)替代方案,您可以使用DriverManager
helper 类,它为您提供了一些方法来处理您的 JDBC 驱动程序。
You might want to
你可能想要
- Use
DriverManager.registerDriver(driverObject);
to register your driver to it's list of drivers
- 用于
DriverManager.registerDriver(driverObject);
将您的驱动程序注册到它的驱动程序列表
Registers the given driver with the DriverManager. A newly-loaded driver class should call the method registerDriver to make itself known to the DriverManager. If the driver is currently registered, no action is taken
向 DriverManager 注册给定的驱动程序。新加载的驱动程序类应调用 registerDriver 方法以使 DriverManager 知道它自己。如果驱动程序当前已注册,则不执行任何操作
- Use
DriverManager.deregisterDriver(driverObject);
to remove it.
- 使用
DriverManager.deregisterDriver(driverObject);
将其删除。
Removes the specified driver from the DriverManager's list of registered drivers.
从 DriverManager 的已注册驱动程序列表中删除指定的驱动程序。
Example:
例子:
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);
or better yet, use a DataSource
或者更好的是,使用DataSource