尝试连接MySQL时出现StackOverflowError

时间:2018-01-10 17:26:20

标签: java mysql database

我正在尝试在基于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 Oxygen 2

     

Java 1.8.0_151

你知道为什么会这样吗?

虽然我正在处理的项目相当复杂,但我调用该函数的调用位置是:

 @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无关,因为如果我误写了驱动程序的名称,那么我会得到一个合理的错误而不是它。

0 个答案:

没有答案