Я задаю тот же вопрос, потому что не нашел ответа. Вот моя проблема. Я пытался использовать драйвер jdbc для подключения к базе данных mysql. Вот мой основной класс обработчика sql:
package com.arslanjava.model;
import java.sql.*;
public class SqlHandler {
private Connection myConnection;
// final private String serverName = "localhost" ;
//final private String port = "3306" ;
//final private String user = "root" ;
// final private String password = "password" ;
public SqlHandler ( String username , String password , String fname , String lName ) throws SQLException {
if ( username != null && password != null && fname != null && lName != null ) {
//Establish connection to the server.
this.establishConnection();
//execute the addUser method
this.addUser(username,password,fname,lName);
//close this connection
this.close();
} else {
throw new NullPointerException () ;
}
}
public SqlHandler() {
}
public void addUser (String us , String pas , String fName , String lName ) throws SQLException {
PreparedStatement statement = myConnection.prepareStatement("INSERT INTO user_info (username, password, first_name, last_name) VALUES (?,?,?,?)");
statement.setString(1,us);
statement.setString(2,pas);
statement.setString(3,fName);
statement.setString(4,lName);
statement.executeUpdate();
}
public void establishConnection () throws SQLException {
myConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/app1","root","password") ; ;
}
public void close() {
if (myConnection != null) {
try {
myConnection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Все работает нормально, когда я использую его в простом java-коде, например, это отлично работает:
package com.arslanjava.model;
import com.arslanjava.model.SqlHandler;
import java.io.IOException;
import java.net.ServerSocket;
import java.sql.SQLException;
public class Test {
public static void main(String[] args) {
SqlHandler handler = new SqlHandler() ;
try {
handler.establishConnection();
handler.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Но когда я пытаюсь использовать его в своих классах сервлетов, я получаю сообщение об ошибке:
Не найдено подходящего драйвера для jdbc: mysql: // localhost / name_of_my_database.
Я проверил ответ в предыдущем вопросе, там говорилось, что это было вызвано двумя причинами:
Вот мой класс сервлета:
package com.arslanjava.web;
import com.arslanjava.model.SqlHandler;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.SQLException;
public class MyRegServlet extends HttpServlet {
@Override
public void doPost (HttpServletRequest request , HttpServletResponse response) {
String username = request.getParameter("us") ;
String password = request.getParameter("psw") ;
String first_name = request.getParameter("fname");
String last_name = request.getParameter("lname") ;
try {
SqlHandler handler = new SqlHandler(username,password,first_name,last_name) ;
} catch (SQLException e) {
request.setAttribute("errorCode","5xx");
request.setAttribute("errorMessage",e.toString());
e.printStackTrace();
RequestDispatcher dispatcher = request.getRequestDispatcher("customErroPage.jsp") ;
try {
dispatcher.forward(request,response);
} catch (ServletException | IOException e1) {
e1.printStackTrace();
}
}
}
}
Вы должны заставить загрузчик классов загрузить драйвер. Сделайте так, как сказал @Rugved.
@Antoniossss, нет. Вам не нужно было этого делать более 5 лет. Почему люди настаивают на устаревших «требованиях»?
Думаю, у меня достаточно хорошая структура проекта, вот скриншот, попробую использовать eclipse.prntscr.com/k2qx0j
@BoristheSpider полезно знать. Более 6 лет я не использую низкоуровневые соединения jdbc, поэтому я действительно могу быть устаревшим.




Вы пробовали использовать эту строчку?
Class.forName("com.mysql.jdbc.Driver");// include this line in your code.
Если нет, попробуйте добавить эту строку в эту функцию.
public void establishConnection() throws SQLException {
myConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/app1","root","password");
}
Это предположение 1) спекулятивно 2) датировано. Уже несколько лет нам не нужно явно регистрировать драйверы.
Вы имели в виду, что для более новой версии java это не нужно?
JDBC 4 был выпущен вместе с Java 7 в 2011 году, более 7 лет назад; с той даты в этом не было необходимости.
@BoristheSpider Спасибо за эту информацию.
Единственное, что решило это для меня, - это использование Class.forName
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Конечно, это должно было стать избыточным еще в 1923 году, но если поместить файл jar mysql-connector практически повсюду, это единственное, что сработало.
используйте подходящую IDE для разработки проекта. пример: Eclipse. Создайте веб-проект. и IDE сгенерирует структуру папок проекта. Под ними вы можете найти папку
lib. Сохраните jar-файл драйвера в этой папке, а затем запустите свой проект.