No suitable driver found for jdbc:mysql://localhost:3306/world
Пишу тестовый проект чтобы разобраться с servlet и базами данных. При соединение с базой данных через main, все работает отлично. Но если хочу запустить servlet через TomCat, то появляется исключение:
No suitable driver found for jdbc:mysql://localhost:3306/world
Проект собирают с помощью maven, туда подключила зависимость sql-connector.
Класс servlet:
public class servlets extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.write("<html> <head> <meta charset='utf-8'> <title>Ввод IP-адреса</title> </head> <body> <form> <p>Enter country:</p> <p><input name='Country' type = 'text' size = '20'></p> <p><input type='submit' value='GO'></p> </form> </body> </html>");
String country = req.getParameter("Country");
MyDB world = new MyDB();
ResultSet cities = null;
try {
world.conn();
cities = world.result_cities(country);
} catch (SQLException e) {
e.printStackTrace();
}
int columns = 0;
try {
columns = cities.getMetaData().getColumnCount();
} catch (SQLException e) {
e.printStackTrace();
}
writer.write("<h1> Cities <h1> ");
writer.write("<ul>");
while (true){
for (int i =1; i <= columns; i ++) {
try {
if (!cities.next()) break;
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
writer.write("<li>" + cities.getString(i) + "</li>" );
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
Класс соединения с БД:
public class MyDB {
private static String URL = "jdbc:mysql://localhost:3306/world";
private String DB_name;
private Connection conn;
private static final String username = "root";
private static final String password = "rootroot";
private static String exec_cities_by_country = "SELECT name FROM CITY WHERE COUNTRY_CODE ='";
public MyDB(){
//this.DB_name = DB_name;
}
public void conn() throws SQLException {
conn = DriverManager.getConnection(URL , username, password);
}
public ResultSet result_cities(String s) throws SQLException {
Statement stat;
stat = conn.createStatement();
ResultSet result = stat.executeQuery(exec_cities_by_country + s + "';");
return result;
}
}
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>ru.web.cities</groupId>
<artifactId>web-cities</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
<configuration>
<webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory>
</configuration>
</plugin>
</plugins>
</build>
WEB-INF.xml
servlets ru.web.cities.servlets
<servlet-mapping>
<servlet-name>servlets</servlet-name> <!--имя сервлета-->
<url-pattern>/home</url-pattern> <!--на какую фразу будет реагировать сервлет-->
</servlet-mapping>
Ответы (1 шт):
Автор решения: Fleckinger
→ Ссылка
Скорее всего tomcat не загружает драйвер, тут есть несколько возможных вариантов решения:
- Явно зарегистрировать драйвер в статическом блоке
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
- Скопировать .jar файл JDBC драйвера в папку $CATALINA_HOME/lib. Стандартный путь для windows может быть таким C:\Program Files (x86)\Apache Software Foundation\Tomcat 9.0\lib