ssh+c3p0调用存储过程、组拼STRUCT时仅使用一个connection的方法 c3p0代理类转原始类(connection)

正常情况,我们会调用存储过程用hibernate提供的连接池代理连接类来调用存储过程,而用新建连接给存储过程组拼STRUCT。

但是这样感觉可以再一步的优化:调用存储过程与构建STRUCT用hibernate提供的同一个代理connection,但是这里需要用到一个connection的类型转换。因为struct不能用代理类组拼。

 1 public Connection getConnection(Connection conn) {
 2         C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor();
 3         Connection con = null;
 4         try {
 5             con = cp30NativeJdbcExtractor
 6                     .getNativeConnection(conn);
 7         } catch (SQLException e) {
 8             e.printStackTrace();
 9         }
10         return con;
11     }

这样,其实是使用了spring提供的一个转换类方法 C3P0NativeJdbcExtractor,他可以把代理类转化为原始类。 这样就可以节省新建连接所用的资源了。
并且,在组拼STRUCT时,不需要再关闭conn了,而是交由hibernate统一关闭。

在这个过程中遇到一个代码异常:Unhandled exception type SQLException。 说明该代码有可能抛出异常,并且你没有通过try。。catch捕捉。  添加try。。catch就正常了

原文地址:https://www.cnblogs.com/kaka-bing/p/3204975.html