2014-02-07 41 views
0

編譯時我正在錯誤我以項目異常線程「main」 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; 
     } 

    } 

我打電話給在另一個文件 -

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)可能的重複 – 2014-03-27 05:50:00

回答

1

DriverManager.getConnection()方法包括調用DriverManager.getConnection(),其中包括呼籲DriverManager.getConnnection(),...

這是因爲您選擇命名的類和方法的方式爲標準的java.sql.DriverManager.getConnection()相同。

0

它看起來像你打電話:

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

曾經返回值之前,並且因爲這是目前在你遞歸調用此方法造成一個無限循環你的方法。

getConnection(...)方法正在調用的getConnection(...)方法,其永遠不會結束,因此StackOverflowError

0

該代碼將在一個無限循環告終。 !這就是爲什麼你的堆棧被填滿。

修復:

取出

DriverManager.getConnection(String_url,USER,PASS); 

從GetConnection函數稱爲將再次調用相同的功能。所以從getConnection功能

0

您的通話

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

創建一個無限遞歸刪除。您正在導入java.sql。*,但是您的電話號碼在您的班級中呼叫getConnection()

更改爲

dbConnection = java.sql.DriverManager.getConnection(String_url,USER,PASS); 
相關問題