Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
Sql server 重置JDBC连接状态(c3p0)_Sql Server_Jdbc_C3p0 - Fatal编程技术网

Sql server 重置JDBC连接状态(c3p0)

Sql server 重置JDBC连接状态(c3p0),sql-server,jdbc,c3p0,Sql Server,Jdbc,C3p0,将C3P0托管连接重置为初始状态的建议方法是什么 我正在使用Microsoft JDBC驱动程序,并在一个连接上设置SET ROWCOUNT 1。这会导致该连接执行的所有查询仅返回一行,即使在该连接已返回到池并稍后再次获取之后也是如此。我应该显式地重置值onCheckin还是onCheckout 主类 import com.mchange.v2.c3p0.ComboPooledDataSource; 导入java.beans.PropertyVetoException; 导入java.sql.S

将C3P0托管连接重置为初始状态的建议方法是什么

我正在使用Microsoft JDBC驱动程序,并在一个连接上设置
SET ROWCOUNT 1
。这会导致该连接执行的所有查询仅返回一行,即使在该连接已返回到池并稍后再次获取之后也是如此。我应该显式地重置值
onCheckin
还是
onCheckout

主类

import com.mchange.v2.c3p0.ComboPooledDataSource;
导入java.beans.PropertyVetoException;
导入java.sql.SQLException;
导入java.sql.Statement;
导入java.sql.Connection;
导入java.sql.ResultSet;
公共班机{
最终组合池数据源CPD;
Main()抛出PropertyVetoException{
cpds=新的ComboPooledDataSource();
setDriverClass(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
setJdbcUrl(“jdbc:sqlserver://10.42.62.41:1433;databaseName=mach;integratedSecurity=false;SendStringParametersAsUnicode=true;applicationName=panda;“”;
设置用户(“测试用户”);
设置密码(“welcome123”);
设置初始池大小(0);
设置最小池大小(1);
cpds.setMaxPoolSize(1);
setConnectionCustomizerClassName(“C3p0ConnectionCustomizer”);
setDescription(“Netbeans测试项目”);
}
Connection getConnection()引发SQLException{
返回cpds.getConnection();
}
公共静态void main(字符串[]args)引发PropertyVetoException、SQLException{
Main m=新的Main();
try(Connection=m.getConnection()){
语句stmt=connection.createStatement();
stmt.execute(“设置行数1”);
}
try(Connection=m.getConnection()){
try(语句stmt=connection.createStatement()){
int cnt=0,rsCnt=0;
布尔结果=stmt.execute(“从Foo中选择*;从Bar中选择*);
如果(结果){
做{
rsCnt++;
ResultSet rs=stmt.getResultSet();
while(rs.next()){
cnt++;
}
系统输出打印项次(rsCnt+“->”+cnt);
rs.close();
results=stmt.getMoreResults();
cnt=0;
}而(结果),;
}
}
}
}
}
自定义程序-主要用于查看正在使用的连接

import com.mchange.v2.c3p0.AbstractConnectionCustomizer;
导入java.sql.Connection;
导入java.sql.SQLException;
导入java.sql.Statement;
公共类C3p0ConnectionCustomizer扩展了AbstractConnectionCustomizer{
@凌驾
Acquire上的公共无效(连接c、字符串pdsIdt){
try(语句stmt=c.createStatement()){
stmt.execute(“设置行数0”);
}捕获(SQLException sqle){
printStackTrace();
}
}
@凌驾
连接c、字符串pdsIdt上的公共void{
System.out.println(“签出“+c+”[“+pdsIdt+”]);
}
@凌驾
public void onCheckIn(连接c,字符串pdsIdt)引发SQLException{
System.out.println(“签入“+c+”[“+pdsIdt+”]”);
}
}

如果没有
SET ROWCOUNT 1
行,则上述查询将返回更多行。自定义程序日志显示正在使用相同的连接。

有人可能会认为,理想情况下,调用
设置行数1
的代码确实应该在将连接释放回池之前通过确保调用
设置行数0
来“自我清理”

但是,如果我们不能绝对保证这种行为,那么将
SET ROWCOUNT 0
调用从
onAcquire
方法移动到
onCheckIn
方法似乎是非常合理的。即使重置
行数
并不是真的必要,但
设置行数0
将是一种相对便宜的操作,这将导致每次入住都需要额外的往返行程


(我刚刚用c3p0-0.9.5.2和mssql jdbc进行了尝试,将
SET ROWCOUNT 0
移动到
onCheckIn
方法中达到了预期效果。)

重置onCheckIn值不是比重置onCheckOut值更好吗?我从c3p0文档中了解到签入是异步处理的,而签出本质上是同步的。