0

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

线程“主”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();
            }
        }
    }
4

1 回答 1

1

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

特别是对于 BoneCP,您应该能够使用包装的语句StatementHandle.getInternalStatement()(尽管我对此不是 100% 确定)。

尽管最大的问题是:为什么需要强制转换为com.mysql.jdbc.Statement,但java.sql.Statement界面对您来说还不够吗?

于 2012-07-07T19:23:13.430 回答