Java BoneCP语句句柄不能转换为JDBC

Java BoneCP语句句柄不能转换为JDBC,java,sql,jdbc,bonecp,Java,Sql,Jdbc,Bonecp,我正在尝试设置boneCP连接,收到以下错误消息: 线程“main”java.lang.ClassCastException中的异常:com.jolbox.bonecp.StatementHandle无法转换为com.mysql.jdbc.Statement 连接似乎工作正常,但我在查询时被阻止了 这是我的密码: BoneCP connectionPool = null; Connection connection = null; try { /

我正在尝试设置boneCP连接,收到以下错误消息:

线程“main”java.lang.ClassCastException中的异常:com.jolbox.bonecp.StatementHandle无法转换为com.mysql.jdbc.Statement

连接似乎工作正常,但我在查询时被阻止了

这是我的密码:

        BoneCP connectionPool = null;
    Connection connection = null;

    try {
        // load the database driver (make sure this is in your classpath!)
        Class.forName("com.mysql.jdbc.Driver");
    } catch (Exception e) {
        e.printStackTrace();
        return;
    }

    try {
        // setup the connection pool
        BoneCPConfig config = new BoneCPConfig();
        config.setJdbcUrl("jdbc:mysql://192.126.0.0:3306/"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
        config.setUsername("root"); 
        config.setPassword("");
        config.setMinConnectionsPerPartition(5);
        config.setMaxConnectionsPerPartition(10);
        config.setPartitionCount(1);
        connectionPool = new BoneCP(config); // setup the connection pool

        connection = connectionPool.getConnection(); // fetch a connection

        if (connection != null){
            System.out.println("Connection successful!");
            Statement stmt = (Statement) connection.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 1 FROM table"); // do something with the connection.
            while(rs.next()){
                System.out.println(rs.getString(1)); // should print out "1"'
            }
        }
        connectionPool.shutdown(); // shutdown connection pool.
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

这很简单:如果您使用BoneCP,就不能直接访问底层驱动程序的对象。这通常适用于连接池,因为它们通常使用对象代理来处理资源管理(例如,当连接返回到池时关闭语句、结果集等)。这尤其适用于语句,因为连接池也可以(通常也可以)提供语句缓存

特别是对于BoneCP,您应该能够使用(尽管我不是100%确定)获得包装语句


虽然最大的问题是:为什么需要转换到
com.mysql.jdbc.Statement
,但是
java.sql.Statement
接口对您来说是否足够?

我不知道如何回答您的问题?我应该如何构造代码来执行一个简单的查询?您通常应该只与JDBC接口交谈,而不与特定驱动程序的类交谈。在你的问题代码中,没有什么不能通过简单地使用
java.sql.Statement
来完成的。因此,将
com.mysql.jdbc.Statement
的导入替换为
java.sql.Statement
(这也将消除您应用强制转换的需要)。感谢您的帮助^!!您知道如何将连接传递给动作侦听器(线程),以便每次迭代都可以查询数据库吗?单独问一个问题可能更好。虽然在动作监听器中需要数据库连接听起来不是一个好的设计。