2013-10-16 2 views
2

Netbeans 7.2에서이 오류가 발생했습니다. ClassNotFoundexception 및 InstantationException이 발생합니다. 나는이 문제에 정말로 붙어있다. 친절하게 도와주세요.Class.forName ("com.mysql.jdbc.Driver"). newInstance()

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    try { 
     String driver = "com.mysql.jdbc.Driver"; 
     con = null; 
     String username = ""; 
     String password = ""; 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 

     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "password"); 
     Statement st = con.createStatement(); 
     ResultSet mar = st.executeQuery("SELECT * FROM table"); 


     Gson gson = new GsonBuilder().create(); 
     response.setContentType("application/json"); 
     response.setCharacterEncoding("utf-8"); 

    } catch (SQLException e) { 
       String message = e.getMessage(); 
    } 
+5

먼저, .newInstance() 호출이 필요 없다. 둘째,'mysql-connector.jar'를'WEB-INF/lib'에 추가하여 classpath에 추가 했습니까? –

+0

왜 .newInstance() ???? –

+0

셋째, .forName() 호출이 필요하지 않습니다. 질문의 남은 부분은 많지 않습니다. – EJP

답변

7

이 간단한 방법은 어떨까요?!

java.sql.Driver d=new com.mysql.jdbc.Driver(); 

나는 왜 이런 방식으로 데이터베이스에 연결합니까?! 서버로 관리하는 것이 더 좋습니다.

먼저 설정과 같이 context.xml (Tomcat을 사용하는 경우) :

<context> 
<Resource name="_ds" auth="Container" type="javax.sql.DataSource" 
       maxActive="128" maxIdle="32" username="_admin" password="qwerty" driverClassName="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://127.0.0.1:3306/dbname"/> 
</context> 

그런 다음, 간단한 같은 등 서블릿 /에서이 자원에서 연결 얻을 :

public void init() { 
    try { 
     _ds = (DataSource) InitialContext.lookup("java:/comp/env/_ds"); 
    } catch (Exception ex) { 
    } 
} 

private javax.sql.DataSource _ds; 

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
{ 
    try { 
     /*String driver = "com.mysql.jdbc.Driver"; 
     con = null; 
     String username = ""; 
     String password = ""; 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 

     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "password");*/ 
     Connection con=_ds.getConnection(); 
     Statement st = con.createStatement(); 
     ResultSet mar = st.executeQuery("SELECT * FROM table"); 


     Gson gson = new GsonBuilder().create(); 
     response.setContentType("application/json"); 
     response.setCharacterEncoding("utf-8"); 
     con.close(); 
    } catch (SQLException e) { 
     String message = e.getMessage(); 
    } 

작성자 그런데, <CATALINA_BASE>/lib 폴더에있는 MySQL JDBC 드라이버 jar 파일을 컴파일하는 것을 잊지 마십시오.

+1

+1. 나는 누락 된 클래스 문제를 런타임 대신 컴파일 타임 오류로 이동시키기 때문에 실제 생성자를 사용하라는 제안을 좋아한다.JNDI와 서버 관리 연결을 제안 할 수 있다면 다시 +1 할 것입니다. –

+0

고마워, 이제 계속 나아갈 수있어. java.sql.Driver d = 새 com.mysql.jdbc.Driver(); –

4

당신이 필요로 Class.forName("com.mysql.jdbc.Driver")

이 클래스 로더와 같은 역할을하고 당신을 위해 당신의 드라이버 클래스를로드합니다. 이를 위해서는 해당 jar 파일 (드라이버 구현이 있음)을 추가해야합니다. 따라서 다운로드하여 클래스 경로에 mysql-connector.jar을 추가하십시오.

참고 : 자바 7을 사용하는 경우 자바에서 기본적으로 제공 JDBC 4.1에 추가 된 경우에도 Class.forName("com.mysql.jdbc.Driver") statement.Automatic 자원 관리 (ARM)을 추가 할 필요가 없습니다 (7)

2

당신은 할 수 있습니다 더 큰 문제를 해결할 수 있습니다. 서블릿에 데이터베이스 연결 정보와 같은 구성 데이터를 직접 입력하지 않아야합니다.

Tomcat을 사용하고 있습니까? JNDI 만 사용하면됩니다. Servlet을 다시 컴파일 할 필요없이 데이터베이스 세부 사항 및 드라이버를 변경할 수 있습니다.

여기 Tomcat 7.0 JNDI Datasource HOW-TO은 데이터베이스에 Connection을 얻을 수있는 다양한 방법을 보여줍니다.

해당 페이지에서 Connection (Oracle 8i, 9i & 10g -> 3 부) 및 how to write a MySQL specific configuration을 얻는 방법에 대한 코드 예가 ​​있습니다.

올바른 MySQL jar 파일을 다운로드하여 Tomcat의 lib/ 디렉토리 (또는 WAR의 WEB-INF/lib)에 저장하십시오.

0

프로젝트의 lib 폴더에 mysqlconnector.jar (http://dev.mysql.com/downloads/connector/j/) 파일을 추가해야합니다. 프로젝트와 함께 포함 시키면 데이터베이스와의 연결에 액세스 할 수 있습니다.

jar를 빌드 경로에 추가하십시오.

관련 문제