【发布时间】:2021-01-17 11:36:41
【问题描述】:
我创建了一个新的 Amazon AWS Ubuntu 16.04 实例并安装了 mysql-server、JDK 8 和 Maven。就是这样,没有安装其他任何东西。然而,在创建了一个简单的测试数据库并尝试运行一个简单的 Java 程序(如下提供)访问该测试数据库以确保 mysql 工作正常后,我得到了臭名昭著的No suitable driver found for jdbc 异常。这没有任何意义,因为我使用的是 JDK 8 并将 mysql-connector-java 添加为依赖项。我整天都在点击数十个类似的 SO 帖子,尝试了最常提出的解决方案,但无济于事。我尝试过的通常推荐的解决方案包括:
- 已验证 MySQL 连接字符串符合正确的语法。
- 尝试使用
Class.forName("com.mysql.jdbc.Driver").newInstance();,我很确定我不需要,因为我使用的是 JDK 8 和 JDK 6 or higher feature "autoloading of JDBC drivers",因此不需要 Class.forName()。
这是我创建的简单数据库
mysql>create database moviedbtest;
mysql>use moviedbtest;
mysql>create table moviestars(
id varchar(10) primary key,
name varchar(100) not null,
birthYear integer
);
mysql> INSERT INTO moviestars VALUES('145061', 'Angelina Jolie', 1975);
mysql> INSERT INTO moviestars VALUES('855017', 'Clint Eastwood', 1930);
这是我的 Maven POM.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>jdbc-test-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</project>
这是一个简单的Java测试程序
import java.sql.*;
public class JDBC1 {
public static void main(String[] arg) throws Exception {
//Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection("jdbc:mysql:///moviedbtest?autoReconnect=true&useSSL=false", "mytestuser" , "mypassword");
Statement select = connection.createStatement();
String query = "Select * from moviestars";
ResultSet result = select.executeQuery(query);
ResultSetMetaData metadata = result.getMetaData();
System.out.println("There are " + metadata.getColumnCount() + " columns");
}
}
【问题讨论】:
-
@JanezKuhar 第一个建议不适用,因为我没有安装任何服务器,因此没有 lib 文件夹。第二个建议似乎也不适用,因为我很确定我的 JDBC 连接 url 遵循正确的语法。