MySQL
데이터베이스에 대한 연결을 설정 한 서블릿 클래스가 하나 있습니다. 이것은 doGet()
방법에 대한 내 코드입니다 .
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//Class.forName("com.mysql.jdbc.Driver");
con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","rspl123#");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(con);
response.getWriter().write(request.getParameter("q"));
}
위 코드의 경우 서블릿이 처음 호출되면 예외가 발생합니다 No suitable driver found
. 그러나 두 번째로 성공적으로 실행되고 연결이 설정됩니다.
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at controller.FetchSuggestion.doGet(FetchSuggestion.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
null
com.mysql.jdbc.JDBC4Connection@1b83048
com.mysql.jdbc.JDBC4Connection@1455d1c
com.mysql.jdbc.JDBC4Connection@1f51e5c
위의 코드는에서 주석을 제거 Class.forName()
하면 잘 작동하지만 처음에는 작동하지 않고 두 번째로 연결을 설정할 수 있습니다. 참고 : 클래스 경로에 이미 MySQL JAVA 커넥터가 있습니다.
MySQL Java Connector 버전 : 5.1.10
JDK : 1.6
IDE : MyEclipse for Spring
먼저 mysql-connector.jar
클래스 경로에 를 포함해야합니다 . 다음에서 항아리를 다운로드 할 수 있습니다.
그런 다음 다음 문을 사용 하여 데이터 소스 연결 을 구성 할 수 있습니다 .
// This will load the MySQL driver, each DB has its own driver
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
// Now you can setup the connection with the DB
Connection connection=null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","username", "password");
}
catch (SQLException e)
{
System.out.println("Connection Failed..!");
e.printStackTrace();
}
에 등록하는 DriverClassName
것은 매우 중요한 단계 입니다. 그것을 건너 뛰지 마십시오.
편집 : 나는 당신의 문제를 발견했다고 생각합니다. 분석은 다음과 같습니다.
Class.forName
는 이 드라이버를로드 하도록 특별히 요청DriverManager
했기 때문 입니다.두 번째 요점에 대해 자세히 설명 하겠습니다 .
당신은 절대적 권리 것을 말하는 응용 프로그램없이 작동합니다Class.forName
. 하지만 aaahhh ... 문제 가 있습니다 .
Class.forName
는 DriverManager에 그것을 찾을 수있는 많은 드라이버로로드하려고합니다 다음 주어진 연결 요청, 그것은 대상 URL에 연결을 시도 할 차례 각 드라이버를 요청합니다.이는 응용 프로그램에 여러 드라이버가있을 수 있음을 의미합니다 . DriverManager에 이러한 드라이버를 발견하고 데이터베이스로의 연결을 설정하는 데 노력했다 . 첫 번째 드라이버 FOUND 오른쪽 아니었다 때문에 연결이 널 (null)이었다 . 그러나 잠깐, DriverManager는 똑똑 합니다. 데이터베이스에 연결할 수 없다는 것을 알고 있으므로 이제 발견 된 다른 드라이버를 사용합니다 . 그리고 Presto, 연결이 설정됩니다.
참조 : 드라이버 인터페이스를 확인하십시오 . 문서에 언급되어 있습니다.
도움이 되었기를 바랍니다. :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다