我正在尝试在基于java的项目和mysql数据库之间建立连接。据我所知,数据库似乎很好(预期的信息存储在它的列中)。然而,当我使用java程序打开一个连接时,我得到了一个stackoverflow错误,我不知道为什么会发生这种情况:
Exception in thread "Thread-2" java.lang.StackOverflowError
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
我已经采取了一些行动来解决这个问题,但都没有奏效。其中,我成功地运行了mysqljavatutorials中描述的示例,这使我认为这个问题不是因为jdbc连接器、操作系统、数据库本身或mysql服务器版本。
但是,我注意到,如果我完全删除数据库(通过执行drop database mydatabase),我会得到完全相同的异常,就好像数据库根本不存在一样。如果我将数据库的名称更改为不存在的名称,也会发生这种情况。我的机器使用:
操作系统:ubuntu 64位14.04.5 lts
mysql服务器版本:5.5.58
日 eclipse 氧气2
java 1.8.0
你知道为什么会这样吗?
虽然我正在处理的项目相当复杂,但调用函数的调用位置是:
@Override
public void openDBConnection() throws Exception {
//this method establish a database connection
try {
// This will load the MySQL driver, each DB has its own driver
Class.forName(driver);
// Setup the connection with the DB
//////////////////////////////////////////////////////////////////////////////
String connection = "jdbc:mysql://" + host + "/" + dbname + "?"
+ "user=" + user + "&password=" + passwd + "&useSSL=false";
System.out.println(connection);
connect = DriverManager.getConnection(connection);
//////////////////////////////////////////////////////////////////////////////
} catch (ClassNotFoundException | SQLException e) {
throw e;
} finally {
}
}
异常在 connect = DriverManager.getConnection(connection);
线路。我得到的连接字符串很好。实际上,我很确定这与 JDBC connection
因为如果我写错了司机´然后我得到一个合理的错误而不是它。
暂无答案!
目前还没有任何答案,快来回答吧!