2014-02-07 2 views
0

컴파일 할 때 오류를 얻고있다 내 프로젝트 - 여기예외 "주"java.lang.StackOverflowError의 호출 기능의 getConnection()

Exception in thread "main" java.lang.StackOverflowError 
    at sun.reflect.Reflection.getCallerClass(Native Method) 
    at java.lang.ClassLoader.getCallerClassLoader(Unknown Source) 
    at java.lang.Class.forName(Unknown Source) 
    at testpackage.DriverManager.getConnection(DriverManager.java:14) 
    at testpackage.DriverManager.getConnection(DriverManager.java:20) 
    at testpackage.DriverManager.getConnection(DriverManager.java:20) 

내 첫 번째 파일 코드 -

package testpackage; 

import java.sql.*; 

import javax.swing.JOptionPane; 

class DriverManager { 
     static Connection dbConnection = null; 

     public static Connection getConnection(String String_url, String USER, String PASS) throws SQLException 
     { 
      try { 

      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      //JOptionPane.showMessageDialog(null, "driver load successfully"); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      //JOptionPane.showMessageDialog(null, "driver load failed"); 
     } 
      dbConnection = DriverManager.getConnection(String_url,USER,PASS); 
      return dbConnection; 
     } 

    } 
내가 문제를 디버그 (SECURITY) 기능을 비활성화 찾는 경고 사용한 노트 -

나는 다른 파일 -

package testpackage; 
import java.awt.Rectangle; 
import org.openqa.selenium.firefox.FirefoxDriver; 
public class testclass { 
public static void main (String[] args) throws Exception 
{ 
DriverManager Connection_getConnection = new DriverManager(); 
     Connection_getConnection.getConnection("database string url","username","password"); 
} 
} 

에서이 방법을 호출 이온 전화가 재귀 적으로 발생하기 때문에 재귀 적으로 호출됩니다.

+1

변경하는 이유는 원래 구현으로 똑같은 일을 할 것 같다 바퀴를 재발견하려고? –

+0

가능한 중복 [스택 오버플로 오류 란 무엇입니까?] (http://stackoverflow.com/questions/214741/what-is-a-stack-overflow-error) –

답변

1

귀하의 DriverManager.getConnection() 방법은 DriverManager.getConnnection()를 호출에 구성 DriverManager.getConnection(), ... 당신이 당신의 클래스와 메소드를 표준 java.sql.DriverManager.getConnection()과 같은 방식으로 이름을 선택했기 때문이다

를 호출에 구성되어 있습니다. 지금까지의 값을 반환하기 전에

dbConnection = DriverManager.getConnection(String_url,USER,PASS); 

, 그 이후로 당신은 당신이 반복적으로 무한 루프의 원인이 메서드를 호출하는 현재하고있는 방법이다 :

0

그것은 당신이 호출하는 것처럼 보인다.

getConnection(...) 방법은 끝이 없을 것이다 getConnection(...) 메소드를 호출하고, 따라서 StackOverflowError

0

코드는 무한 루프에 끝날 것이다. !!! 그래서 스택이 가득 차게됩니다. !!

수정 :

가 제거 다시 같은 함수를 호출 할의 getConnection 함수에서 호출

DriverManager.getConnection(String_url,USER,PASS); 

. 그래서 getConnection 기능

0

귀하의 전화

dbConnection = DriverManager.getConnection(String_url,USER,PASS); 

는 무한 재귀를 만들어에서 해당를 제거합니다. java.sql. *을 가져오고 있지만 그럼에도 전화가 getConnection()입니다.

dbConnection = java.sql.DriverManager.getConnection(String_url,USER,PASS); 
관련 문제