“线程中的异常”;“主要”;调用函数getConnection()时出现java.lang.StackOverflower错误
我在编译项目时遇到错误-“线程中的异常”;“主要”;调用函数getConnection()时出现java.lang.StackOverflower错误,java,Java,我在编译项目时遇到错误- 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 t
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来调试问题并递归查找函数调用,因为我一个接一个地收到警报。您的
DriverManager.getConnection()
方法包括调用DriverManager.getConnection()
,它包括调用DriverManager.getConnection()
这是因为您选择了与标准的
java.sql.DriverManager.getConnection()
相同的方式来命名类和方法。看起来您正在调用:
dbConnection = DriverManager.getConnection(String_url,USER,PASS);
在返回一个值之前,由于这是您当前使用的方法,您将递归调用此方法,从而导致无限循环
getConnection(…)
方法正在调用永远不会结束的getConnection(…)
方法,因此stackoverflowerr
代码将以无限循环结束!!!这就是为什么你的堆栈被填满的原因强>
修正:
移除
DriverManager.getConnection(String_url,USER,PASS);
从getConnection函数调用将再次调用相同的函数。因此,请将其从调用的getConnection
函数中删除
dbConnection = DriverManager.getConnection(String_url,USER,PASS);
创建一个无休止的递归。您正在导入java.sql.*但您的调用仍然在类中调用getConnection()
改为
dbConnection = java.sql.DriverManager.getConnection(String_url,USER,PASS);
为什么您试图重新发明一个轮子,它似乎做了与原始实现完全相同的事情