bug fixed for duplicate getUpdateCount

This commit is contained in:
温少
2012-06-06 08:03:57 +08:00
parent 885d3c37ab
commit d70b5b21cd
10 changed files with 248 additions and 51 deletions
@@ -35,18 +35,20 @@ import com.alibaba.druid.stat.JdbcSqlStat;
*/
public class StatementProxyImpl extends WrapperProxyImpl implements StatementProxy {
private final ConnectionProxy connection;
private final Statement statement;
private final ConnectionProxy connection;
private final Statement statement;
protected String lastExecuteSql;
private long lastExecuteTimeNano;
protected JdbcSqlStat sqlStat;
protected boolean firstResultSet;
protected String lastExecuteSql;
private long lastExecuteTimeNano;
protected JdbcSqlStat sqlStat;
protected boolean firstResultSet;
protected ArrayList<String> batchSqlList;
protected ArrayList<String> batchSqlList;
protected StatementExecuteType lastExecuteType;
protected Integer updateCount = null;
public StatementProxyImpl(ConnectionProxy connection, Statement statement, long id){
super(statement, id);
this.connection = connection;
@@ -102,15 +104,17 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public boolean execute(String sql) throws SQLException {
updateCount = null;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.Execute;
firstResultSet = createChain().statement_execute(this, sql);
return firstResultSet;
}
@Override
public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
updateCount = null;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.Execute;
firstResultSet = createChain().statement_execute(this, sql, autoGeneratedKeys);
@@ -119,6 +123,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public boolean execute(String sql, int[] columnIndexes) throws SQLException {
updateCount = null;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.Execute;
firstResultSet = createChain().statement_execute(this, sql, columnIndexes);
@@ -127,6 +132,7 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public boolean execute(String sql, String[] columnNames) throws SQLException {
updateCount = null;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.Execute;
firstResultSet = createChain().statement_execute(this, sql, columnNames);
@@ -135,12 +141,19 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public int[] executeBatch() throws SQLException {
lastExecuteType = StatementExecuteType.ExecuteBatch;
return createChain().statement_executeBatch(this);
lastExecuteType = StatementExecuteType.ExecuteBatch;
int[] updateCounts = createChain().statement_executeBatch(this);
if (updateCounts != null && updateCounts.length == 1) {
updateCount = updateCounts[0];
}
return updateCounts;
}
@Override
public ResultSet executeQuery(String sql) throws SQLException {
updateCount = null;
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteQuery;
return createChain().statement_executeQuery(this, sql);
@@ -150,28 +163,32 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
public int executeUpdate(String sql) throws SQLException {
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
return createChain().statement_executeUpdate(this, sql);
updateCount = createChain().statement_executeUpdate(this, sql);
return updateCount;
}
@Override
public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
return createChain().statement_executeUpdate(this, sql, autoGeneratedKeys);
updateCount = createChain().statement_executeUpdate(this, sql, autoGeneratedKeys);
return updateCount;
}
@Override
public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
return createChain().statement_executeUpdate(this, sql, columnIndexes);
updateCount = createChain().statement_executeUpdate(this, sql, columnIndexes);
return updateCount;
}
@Override
public int executeUpdate(String sql, String[] columnNames) throws SQLException {
lastExecuteSql = sql;
lastExecuteType = StatementExecuteType.ExecuteUpdate;
return createChain().statement_executeUpdate(this, sql, columnNames);
updateCount = createChain().statement_executeUpdate(this, sql, columnNames);
return updateCount;
}
@Override
@@ -206,11 +223,13 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
@Override
public boolean getMoreResults() throws SQLException {
updateCount = null;
return createChain().statement_getMoreResults(this);
}
@Override
public boolean getMoreResults(int current) throws SQLException {
updateCount = null;
return createChain().statement_getMoreResults(this, current);
}
@@ -239,9 +258,13 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
return createChain().statement_getResultSetType(this);
}
//bug fixed for oracle
@Override
public int getUpdateCount() throws SQLException {
return createChain().statement_getUpdateCount(this);
if (updateCount == null) {
updateCount = createChain().statement_getUpdateCount(this);
}
return updateCount;
}
@Override
@@ -356,18 +379,18 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro
}
public long getLastExecuteTimeNano() {
return lastExecuteTimeNano;
}
return lastExecuteTimeNano;
}
public void setLastExecuteTimeNano(long lastExecuteTimeNano) {
this.lastExecuteTimeNano = lastExecuteTimeNano;
}
public void setLastExecuteTimeNano(long lastExecuteTimeNano) {
this.lastExecuteTimeNano = lastExecuteTimeNano;
}
public StatementExecuteType getLastExecuteType() {
return lastExecuteType;
}
public StatementExecuteType getLastExecuteType() {
return lastExecuteType;
}
public boolean isFirstResultSet() {
return firstResultSet;
}
public boolean isFirstResultSet() {
return firstResultSet;
}
}