/* * Copyright 1999-2015 dangdang.com. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * </p> */ package com.dangdang.ddframe.rdb.sharding.jdbc; import com.dangdang.ddframe.rdb.integrate.tbl.AbstractShardingTablesOnlyDBUnitTest; import org.junit.Before; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; public final class ShardingPreparedStatementTableOnlyTest extends AbstractShardingTablesOnlyDBUnitTest { private ShardingDataSource shardingDataSource; @Before public void init() throws SQLException { shardingDataSource = getShardingDataSource(); } @Test public void assertExecuteQueryWithParameter() throws SQLException { String sql = "SELECT COUNT(*) AS `orders_count` FROM `t_order` WHERE `status` = ?"; try ( Connection connection = shardingDataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) { preparedStatement.setString(1, "init"); ResultSet resultSet = preparedStatement.executeQuery(); assertTrue(resultSet.next()); assertThat(resultSet.getLong(1), is(20L)); ShardingPreparedStatement sps = (ShardingPreparedStatement) preparedStatement; assertThat(sps.getRoutedStatements().size(), is(10)); } } @Test public void assertAddBatch() throws SQLException { String sql = "INSERT INTO `t_order`(`order_id`, `user_id`, `status`) VALUES (?,?,?)"; try ( Connection connection = shardingDataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql); java.sql.Statement queryStatement = connection.createStatement()) { preparedStatement.setInt(1, 3101); preparedStatement.setInt(2, 11); preparedStatement.setString(3, "BATCH"); preparedStatement.addBatch(); preparedStatement.setInt(1, 3102); preparedStatement.setInt(2, 12); preparedStatement.setString(3, "BATCH"); preparedStatement.addBatch(); preparedStatement.setInt(1, 3111); preparedStatement.setInt(2, 21); preparedStatement.setString(3, "BATCH"); preparedStatement.addBatch(); preparedStatement.setInt(1, 3112); preparedStatement.setInt(2, 22); preparedStatement.setString(3, "BATCH"); preparedStatement.addBatch(); int[] result = preparedStatement.executeBatch(); for (int each : result) { assertThat(each, is(1)); } try (ResultSet rs = queryStatement.executeQuery("SELECT `user_id` from `t_order` where `order_id` = 3101")) { assertThat(rs.next(), is(true)); assertThat(rs.getInt(1), is(11)); assertThat(rs.next(), is(false)); } try (ResultSet rs = queryStatement.executeQuery("SELECT `user_id` from `t_order` where `order_id` = 3102")) { assertThat(rs.next(), is(true)); assertThat(rs.getInt(1), is(12)); assertThat(rs.next(), is(false)); } try (ResultSet rs = queryStatement.executeQuery("SELECT `user_id` from `t_order` where `order_id` = 3111")) { assertThat(rs.next(), is(true)); assertThat(rs.getInt(1), is(21)); assertThat(rs.next(), is(false)); } try (ResultSet rs = queryStatement.executeQuery("SELECT `user_id` from `t_order` where `order_id` = 3112")) { assertThat(rs.next(), is(true)); assertThat(rs.getInt(1), is(22)); assertThat(rs.next(), is(false)); } } } }