Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入/获取数据时mySQL中的MySQLNonTransientConnectionException_Java_Mysql_Junit_Connection_Database Connection - Fatal编程技术网

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

Java 插入/获取数据时mySQL中的MySQLNonTransientConnectionException,java,mysql,junit,connection,database-connection,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

我得到了这个例外

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();
        }   
    }
公共类数据库数据记录器{
专用静态数据库连接数据库=数据库连接
.getInstance();
私有静态连接conn=database.getConnection();
私有静态ArrayList errors=new ArrayList();
//清除整个数据库。
公共静态数据库(){
试一试{
ps=conn.prepareStatement(“删除数据库规划数据”);//-->执行选项!
ps.execute();
ps.close();
}捕获(SQLE异常){
e、 printStackTrace();
}   
}
我目前正在JUnit中进行测试。在测试方法中,我只调用方法
databasedataseter.dropDatabase()
以静态方式。从那时起,没有连接是打开的。调用后,使用连接的实例,因此为什么它似乎已经关闭?连接类本身已经过测试,并按预期交付连接实例


assertEquals(false,db.getConnection().isClosed());
当在
DatabaseConnection
中进行测试时,但当调用
databasedataseter
时,为true。

可能是您的函数(
Connection conn=database.getConnection();
)未提供任何连接,因此您正在获得此连接。如果您正在使用JNDI,则可能是您的连接池大小已耗尽,无法提供连接。如果您正在使用JNDI,请检查JNDI日志以了解此类错误。

将autoReconnect属性设置为true

在hibernate中,它类似于:


jdbc:mysql://127.0.0.1/database?autoReconnect=tr‌ue检查mysql用户权限。您用于连接mysql的用户凭据没有足够的权限。我猜。用户权限在“正常”状态下工作模式。测试时是否存在差异?MySQL如何知道它的用途。它使用用户权限。您必须使用用户凭据连接数据库。检查是否向用户授予“删除数据库”权限。“所有权限”设置autoReconnect属性
true
。在hibernate中…类似于:
jdbc:mysql://127.0.0.1/database?autoReconnect=true
assertEquals(false,db.getConnection().isClosed());
DatabaseConnection
中进行测试时,但在调用
DatabaseDataSetter
时为true