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 }