4.0 用Java去连接Mysql数据库产生的问题 | Java Debug 笔记

136 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:用Java去连接Mysql数据库产生的问题

您如何用Java连接到的MySQL数据库?

当我尝试连接时,我得到以下错误信息:

java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)

或者是

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

或者是

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

回答1:

DriverManager是一种相当古老的使用方式。更好的方法是DataSource通过查找已经为您配置的应用服务器容器来获取一个:

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");

或直接从数据库驱动程序实例化和配置一个:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");

然后从中获取连接,如上:

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();

回答2:

以下是如何安装MySQL和JDBC以及如何使用它们的逐步说明:

1, 下载并安装MySQL Server,只需按照通常的方式进行即可。每次更改时都请记住端口号。默认情况下3306。

2, 下载JDBC驱动程序并放入classpath,解压缩ZIP文件并将包含的JAR文件放入classpath。特定于供应商的JDBC驱动程序是JDBC API的具体实现

3, 在MySQL中创建一个数据库。让我们创建一个数据库javabase。

CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

4,为Java创建用户并授予其访问权限。仅仅使用root是一种不好的做法。

CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';

5,确定JDBC URL。要使用Java连接MySQL数据库,您需要使用以下语法的JDBC URL:


jdbc:mysql://主机名(可以用localhost):端口/数据库名
//举个栗子
jdbc:mysql:// localhost:3306 / javabase
// 冒号都是英文

6,创建一个带有main()测试连接方法的简单Java类。

String url = "jdbc:mysql://localhost:3306/javabase";
String username = "java";
String password = "password";

System.out.println("Connecting database...");

try (Connection connection = DriverManager.getConnection(url, username, password)) {
    System.out.println("Database connected!");
} catch (SQLException e) {
    throw new IllegalStateException("Cannot connect the database!", e);
}

如果获得SQLException: No suitable driver,则意味着JDBC驱动程序根本没有自动加载,或者JDBC URL错误(即,任何已加载的驱动程序都无法识别它)。通常,只要将JDBC 4.0驱动程序放入运行时类路径中,就应该自动加载该驱动程序。你可以手动加载确定问题到底出在哪。

System.out.println("Loading driver...");

try {
    Class.forName("com.mysql.jdbc.Driver");
    System.out.println("Driver loaded!");
} catch (ClassNotFoundException e) {
    throw new IllegalStateException("Cannot find the driver in the classpath!", e);
}