1 /*
2 * Copyright 2009-2024 the original author or authors.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.apache.ibatis.executor.statement;
17
18 import java.sql.SQLException;
19 import java.sql.Statement;
20
21 /**
22 * Utility for {@link java.sql.Statement}.
23 *
24 * @since 3.4.0
25 *
26 * @author Kazuki Shimizu
27 */
28 public class StatementUtil {
29
30 private StatementUtil() {
31 // NOP
32 }
33
34 /**
35 * Apply a transaction timeout.
36 * <p>
37 * Update a query timeout to apply a transaction timeout.
38 *
39 * @param statement
40 * a target statement
41 * @param queryTimeout
42 * a query timeout
43 * @param transactionTimeout
44 * a transaction timeout
45 *
46 * @throws SQLException
47 * if a database access error occurs, this method is called on a closed <code>Statement</code>
48 */
49 public static void applyTransactionTimeout(Statement statement, Integer queryTimeout, Integer transactionTimeout)
50 throws SQLException {
51 if (transactionTimeout == null) {
52 return;
53 }
54 if (queryTimeout == null || queryTimeout == 0 || transactionTimeout < queryTimeout) {
55 statement.setQueryTimeout(transactionTimeout);
56 }
57 }
58
59 }