这是我的代码:
import java.sql.*;
import com.mysql.jdbc.Driver;
public class Main {
public void connect() {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql//localhost:3306/mydb", "dev", "pass");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (con != null) try { con.close(); } catch(Exception e) {}
}
}
public static void main(String[] args) {
Main m = new Main();
m.connect();
}
}
我已将mysql-connector-java-5.1.39.jar作为IntelliJ中的库导入,您可以看到驱动程序已在代码中导入。
但我明白了:
java.sql.SQLException: No suitable driver found for jdbc:mysql//localhost:3306/mydb
我已经看过无数堆栈溢出问题,但我无法弄清楚至少还需要尝试连接的内容。我运行了一个本地SQL服务器,并且我已经仔细检查了端口和数据库名称。
任何想法都会受到赞赏,谢谢。
编辑:这不是重复。有人标记的另一个问题的解决方案与此无关。我已经将jar添加为项目的库,如另一个问题所述。此外,崩溃并没有发生在" Class.forName"部分,它在后续行崩溃。
答案 0 :(得分:2)
您缺少一个冒号角色。
"jdbc:mysql//localhost:3306/mydb"
应该是
"jdbc:mysql://localhost:3306/mydb"
请参阅Connecting to MySQL Using the JDBC DriverManager Interface。
缺少冒号意味着驱动程序管理器将尝试查找名为"mysql//localhost"
而非"mysql"
的驱动程序提供程序。当然,不存在这样的提供者。
您的代码中的Class.forName调用不是必需的。但是,呼叫成功的事实是一个强有力的线索,问题不是驱动程序类丢失。它应该使读者找到其他原因为什么DriverManager
无法找到驱动程序。
答案 1 :(得分:1)
jdbc:mysql//localhost:3306/mydb
mysql
之后您缺少一个冒号。
注意,Class.forName()
行已经十年不用了。
答案 2 :(得分:0)
在MySQL文档中已经很好地解释了MySQL的JDBC连接字符串here。基于此,你在这里做的错误是在数据库类型mysql
你的连接字符串(虽然没有凭据)会改变:
"jdbc:mysql//localhost:3306/mydb"
对此:
"jdbc:mysql://localhost:3306/mydb"