插入/获取数据时mySQL中的MySQLNonTransientConnectionException

时间:2015-08-29 14:48:13

标签: java mysql junit connection database-connection

我收到此异常

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

......调用此方法时:

public class DatabaseDataSetter {

    private static DatabaseConnection database = DatabaseConnection
            .getInstance(); 

    private static Connection conn = database.getConnection();
    private static ArrayList<String> errors = new ArrayList<String>();

    //Clears complete database.
    public static void dropDatabase() {

        try {
            ps = conn.prepareStatement("DROP DATABASE planning_data"); //--> Execption!
            ps.execute();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }   
    }

我目前正在JUnit中测试。在测试方法中,我只以静态方式调用方法DatabaseDataSetter.dropDatabase()。从那时起,没有任何连接被打开。在调用之后,使用了一个连接实例,为什么它似乎已经关闭了呢?连接类本身已经过测试,并按预期提供了连接实例。

assertEquals(false,db.getConnection().isClosed());进行测试时

DatabaseConnection,但在调用DatabaseDataSetter时为true。

2 个答案:

答案 0 :(得分:2)

将autoReconnect属性设置为true。

在休眠......就像:

&#13;
&#13;
<property> name="hibernate.connection.url">jdbc:mysql://127.0.0.1/database?autoReconnect=tr‌ue</property>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

可能是你的函数(Connection conn = database.getConnection();)没有给出任何连接,所以你得到了这个连接。如果您正在使用JNDI,则可能是您的连接池大小已耗尽,并且无法为您提供连接。如果您正在使用JNDI,请检查JNDI日志中是否存在此类错误。