1 /*
2 * Copyright (c) 2012-2023, jcabi.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met: 1) Redistributions of source code must retain the above
8 * copyright notice, this list of conditions and the following
9 * disclaimer. 2) Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution. 3) Neither the name of the jcabi.com nor
13 * the names of its contributors may be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 package com.jcabi.jdbc;
31
32 import java.sql.Date;
33 import java.sql.PreparedStatement;
34 import java.sql.SQLException;
35 import java.sql.Types;
36 import java.util.Collection;
37 import java.util.Collections;
38
39 /**
40 * Prepare arguments.
41 *
42 * @since 0.13
43 */
44 final class PrepareArgs implements Preparation {
45
46 /**
47 * Arguments.
48 */
49 private final transient Collection<Object> args;
50
51 /**
52 * Ctor.
53 * @param arguments Arguments
54 */
55 PrepareArgs(final Collection<Object> arguments) {
56 this.args = Collections.unmodifiableCollection(arguments);
57 }
58
59 @Override
60 @SuppressWarnings(
61 {
62 "PMD.CyclomaticComplexity", "PMD.StdCyclomaticComplexity",
63 "PMD.ModifiedCyclomaticComplexity"
64 }
65 )
66 public void prepare(final PreparedStatement stmt) throws SQLException {
67 int pos = 1;
68 for (final Object arg : this.args) {
69 if (arg == null) {
70 stmt.setNull(pos, Types.NULL);
71 } else if (arg instanceof Long) {
72 stmt.setLong(pos, Long.class.cast(arg));
73 } else if (arg instanceof Boolean) {
74 stmt.setBoolean(pos, Boolean.class.cast(arg));
75 } else if (arg instanceof Date) {
76 stmt.setDate(pos, Date.class.cast(arg));
77 } else if (arg instanceof Integer) {
78 stmt.setInt(pos, Integer.class.cast(arg));
79 } else if (arg instanceof Utc) {
80 Utc.class.cast(arg).setTimestamp(stmt, pos);
81 } else if (arg instanceof Float) {
82 stmt.setFloat(pos, Float.class.cast(arg));
83 } else if (arg instanceof byte[]) {
84 stmt.setBytes(pos, byte[].class.cast(arg));
85 } else {
86 stmt.setObject(pos, arg);
87 }
88 ++pos;
89 }
90 }
91 }