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.Connection; 33 import java.sql.PreparedStatement; 34 import java.sql.SQLException; 35 import java.sql.Statement; 36 37 /** 38 * Connect. 39 * 40 * @since 0.13 41 */ 42 interface Connect { 43 44 /** 45 * Create prepare statement. 46 * 47 * @param conn Open connection 48 * @return The statement 49 * @throws SQLException If some problem 50 */ 51 PreparedStatement open(Connection conn) throws SQLException; 52 53 /** 54 * Connect which opens a <b>CallableStatement</b>, which 55 * is used for calling stored procedures. 56 * 57 * @since 0.13 58 */ 59 final class Call implements Connect { 60 /** 61 * SQL function call. 62 */ 63 private final String sql; 64 65 /** 66 * Ctor. 67 * 68 * @param query Query 69 */ 70 Call(final String query) { 71 this.sql = query; 72 } 73 74 @Override 75 public PreparedStatement open(final Connection conn) throws SQLException { 76 return conn.prepareCall(this.sql); 77 } 78 } 79 80 /** 81 * Plain, without keys. 82 * 83 * @since 0.13 84 */ 85 final class Plain implements Connect { 86 /** 87 * SQL query. 88 */ 89 private final transient String sql; 90 91 /** 92 * Ctor. 93 * 94 * @param query Query 95 */ 96 Plain(final String query) { 97 this.sql = query; 98 } 99 100 @Override 101 public PreparedStatement open(final Connection conn) throws SQLException { 102 return conn.prepareStatement(this.sql); 103 } 104 } 105 106 /** 107 * With returned keys. 108 * 109 * @since 0.13 110 */ 111 final class WithKeys implements Connect { 112 /** 113 * SQL query. 114 */ 115 private final transient String sql; 116 117 /** 118 * Ctor. 119 * 120 * @param query Query 121 */ 122 WithKeys(final String query) { 123 this.sql = query; 124 } 125 126 @Override 127 public PreparedStatement open(final Connection conn) throws SQLException { 128 return conn.prepareStatement( 129 this.sql, 130 Statement.RETURN_GENERATED_KEYS 131 ); 132 } 133 } 134 135 }