我在编译项目时遇到错误 -
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");
}
}
注意 - 我已经使用alert来调试问题并递归地查找函数调用,因为我一个接一个地收到警报。
答案 0 :(得分:1)
您的DriverManager.getConnection()
方法包括调用DriverManager.getConnection()
,其中包括调用DriverManager.getConnnection()
,...
那是因为您选择以与标准java.sql.DriverManager.getConnection()
相同的方式命名您的类和方法。
答案 1 :(得分:0)
看起来你正在打电话:
dbConnection = DriverManager.getConnection(String_url,USER,PASS);
在返回一个值之前,因为这是你当前所处的方法,所以递归调用此方法会导致无限循环。
getConnection(...)
方法调用的getConnection(...)
方法永远不会结束,因此StackOverflowError
答案 2 :(得分:0)
代码将以无限循环结束。 !这就是你的筹码被填满的原因。!!
修复:
删除
DriverManager.getConnection(String_url,USER,PASS);
从getConnection函数调用的将再次调用相同的函数。所以从getConnection
函数
答案 3 :(得分:0)
您的电话
dbConnection = DriverManager.getConnection(String_url,USER,PASS);
创建无限递归。您正在导入java.sql。*但仍然在您的班级中调用getConnection()
。
更改为
dbConnection = java.sql.DriverManager.getConnection(String_url,USER,PASS);