@Override public int getUpdateCount() throws SQLException { return targetStatement.getUpdateCount(); }
@Override public int getUpdateCount() throws SQLException { return statement.getUpdateCount(); }
@Override public int getUpdateCount() throws SQLException { return delegate.getUpdateCount(); }
public int getUpdateCount() throws SQLException { return stmt.getUpdateCount(); }
private int accumulate() throws SQLException { long result = 0; boolean hasResult = false; for (Statement each : getRoutedStatements()) { int updateCount = each.getUpdateCount(); if (updateCount > -1) { hasResult = true; } result += updateCount; } if (result > Integer.MAX_VALUE) { result = Integer.MAX_VALUE; } return hasResult ? Long.valueOf(result).intValue() : -1; }
/** * Get the number of rows */ public int getRowCount() { if (!error() && stmt != null) { try { return stmt.getUpdateCount(); } catch (SQLException e) {} } return -1; }
@Override public final int getUpdateCount() throws SQLException { checkOpen(); try { return stmt.getUpdateCount(); } catch (Throwable t) { throw checkException(t); } }
@Override public final int getUpdateCount() throws SQLException { if (isAccumulate()) { return accumulate(); } else { Collection<? extends Statement> statements = getRoutedStatements(); if (0 == statements.size()) { return -1; } return getRoutedStatements().iterator().next().getUpdateCount(); } }
@Override public int statement_getUpdateCount(StatementProxy statement) throws SQLException { if (this.pos < filterSize) { return nextFilter().statement_getUpdateCount(this, statement); } return statement.getRawObject().getUpdateCount(); }
@Test public void testGetUpdateCount() throws Exception { try (Connection connection = createConnection()) { try (Statement statement = connection.createStatement()) { assertTrue(statement.execute("SELECT 123 x, 'foo' y")); assertEquals(statement.getUpdateCount(), -1); assertEquals(statement.getLargeUpdateCount(), -1); } } }
@Test public void testExecuteUpdateWithCreateTable() throws Exception { try (Connection connection = createConnection("blackhole", "blackhole")) { try (Statement statement = connection.createStatement()) { assertEquals(statement.executeUpdate("CREATE TABLE test_execute_create (x bigint)"), 0); assertNull(statement.getResultSet()); assertEquals(statement.getUpdateCount(), 0); assertEquals(statement.getLargeUpdateCount(), 0); } } }
@Test public void testExecuteUpdateWithInsert() throws Exception { try (Connection connection = createConnection("blackhole", "blackhole")) { try (Statement statement = connection.createStatement()) { assertEquals(statement.executeUpdate("INSERT INTO test_table VALUES (1), (2)"), 2); assertNull(statement.getResultSet()); assertEquals(statement.getUpdateCount(), 2); assertEquals(statement.getLargeUpdateCount(), 2); } } }
@Test public void testStatementReuse() throws Exception { try (Connection connection = createConnection("blackhole", "blackhole")) { try (Statement statement = connection.createStatement()) { // update statement assertFalse(statement.execute("INSERT INTO test_table VALUES (1), (2)")); assertNull(statement.getResultSet()); assertEquals(statement.getUpdateCount(), 2); assertEquals(statement.getLargeUpdateCount(), 2); // query statement assertTrue(statement.execute("SELECT 123 x, 'foo' y, CAST(NULL AS bigint) z")); ResultSet resultSet = statement.getResultSet(); assertNotNull(resultSet); assertEquals(statement.getUpdateCount(), -1); assertEquals(statement.getLargeUpdateCount(), -1); resultSet.close(); // update statement assertFalse(statement.execute("INSERT INTO test_table VALUES (1), (2), (3)")); assertNull(statement.getResultSet()); assertEquals(statement.getUpdateCount(), 3); assertEquals(statement.getLargeUpdateCount(), 3); } } }
@Test public void testExecuteWithQuery() throws Exception { try (Connection connection = createConnection()) { try (Statement statement = connection.createStatement()) { assertTrue(statement.execute("SELECT 123 x, 'foo' y, CAST(NULL AS bigint) z")); ResultSet rs = statement.getResultSet(); assertEquals(statement.getUpdateCount(), -1); assertEquals(statement.getLargeUpdateCount(), -1); assertTrue(rs.next()); assertEquals(rs.getLong(1), 123); assertFalse(rs.wasNull()); assertEquals(rs.getLong("x"), 123); assertFalse(rs.wasNull()); assertEquals(rs.getLong(3), 0); assertTrue(rs.wasNull()); assertEquals(rs.getLong("z"), 0); assertTrue(rs.wasNull()); assertNull(rs.getObject("z")); assertTrue(rs.wasNull()); assertEquals(rs.getString(2), "foo"); assertFalse(rs.wasNull()); assertEquals(rs.getString("y"), "foo"); assertFalse(rs.wasNull()); assertFalse(rs.next()); } } }
private ExecuteResponseUnit executeWithMetadata(final Statement statement, final String sql, final ConnectionMode connectionMode, final boolean isReturnGeneratedKeys) throws SQLException { backendConnection.add(statement); if (!jdbcExecutorWrapper.executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0)); } ResultSet resultSet = statement.getResultSet(); backendConnection.add(resultSet); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); if (0 == resultSetMetaData.getColumnCount()) { return new ExecuteUpdateResponseUnit(new OKPacket(1)); } return new ExecuteQueryResponseUnit(getHeaderPackets(resultSetMetaData), createQueryResult(resultSet, connectionMode)); }
private ExecuteResponseUnit executeWithMetadata(final Statement statement, final String sql, final ConnectionMode connectionMode, final boolean isReturnGeneratedKeys) throws SQLException { backendConnection.add(statement); if (!jdbcExecutorWrapper.executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0)); } ResultSet resultSet = statement.getResultSet(); backendConnection.add(resultSet); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); if (0 == resultSetMetaData.getColumnCount()) { return new ExecuteUpdateResponseUnit(new OKPacket(1)); } return new ExecuteQueryResponseUnit(getHeaderPackets(resultSetMetaData), createQueryResult(resultSet, connectionMode)); }
private ExecuteResponseUnit executeWithoutMetadata(final Statement statement, final String sql, final ConnectionMode connectionMode, final boolean isReturnGeneratedKeys) throws SQLException { backendConnection.add(statement); if (!jdbcExecutorWrapper.executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0)); } ResultSet resultSet = statement.getResultSet(); backendConnection.add(resultSet); return new ExecuteQueryResponseUnit(null, createQueryResult(resultSet, connectionMode)); }
private ExecuteResponseUnit executeWithoutMetadata(final Statement statement, final String sql, final ConnectionMode connectionMode, final boolean isReturnGeneratedKeys) throws SQLException { backendConnection.add(statement); if (!jdbcExecutorWrapper.executeSQL(statement, sql, isReturnGeneratedKeys)) { return new ExecuteUpdateResponseUnit(new OKPacket(1, statement.getUpdateCount(), isReturnGeneratedKeys ? getGeneratedKey(statement) : 0)); } ResultSet resultSet = statement.getResultSet(); backendConnection.add(resultSet); return new ExecuteQueryResponseUnit(null, createQueryResult(resultSet, connectionMode)); }
@Test public void testBatchUpdateWithNoBatchSupport() throws Exception { final String[] sql = {"UPDATE NOSUCHTABLE SET DATE_DISPATCHED = SYSDATE WHERE ID = 1", "UPDATE NOSUCHTABLE SET DATE_DISPATCHED = SYSDATE WHERE ID = 2"}; given(this.statement.execute(sql[0])).willReturn(false); given(this.statement.getUpdateCount()).willReturn(1, 1); given(this.statement.execute(sql[1])).willReturn(false); mockDatabaseMetaData(false); given(this.connection.createStatement()).willReturn(this.statement); JdbcTemplate template = new JdbcTemplate(this.dataSource, false); int[] actualRowsAffected = template.batchUpdate(sql); assertTrue("executed 2 updates", actualRowsAffected.length == 2); verify(this.statement, never()).addBatch(anyString()); verify(this.statement).close(); verify(this.connection, atLeastOnce()).close(); }
@Test public void testBatchUpdateWithNoBatchSupportAndSelect() throws Exception { final String[] sql = {"UPDATE NOSUCHTABLE SET DATE_DISPATCHED = SYSDATE WHERE ID = 1", "SELECT * FROM NOSUCHTABLE"}; given(this.statement.execute(sql[0])).willReturn(false); given(this.statement.getUpdateCount()).willReturn(1); given(this.statement.execute(sql[1])).willReturn(true); mockDatabaseMetaData(false); given(this.connection.createStatement()).willReturn(this.statement); JdbcTemplate template = new JdbcTemplate(this.dataSource, false); this.thrown.expect(InvalidDataAccessApiUsageException.class); try { template.batchUpdate(sql); } finally { verify(this.statement, never()).addBatch(anyString()); verify(this.statement).close(); verify(this.connection, atLeastOnce()).close(); } }