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 }