-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPreparedStatement_Interface.txt
364 lines (279 loc) · 20 KB
/
PreparedStatement_Interface.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
****** Interface PreparedStatement ******
public interface PreparedStatement extends Statement
Все суперинтерфейсы: AutoCloseable, Statement, Wrapper
Все известные субинтерфейсы: CallableStatement
Объект, представляющий предварительно скомпилированный
оператор SQL. Оператор SQL предварительно компилируется
и сохраняется в объекте PreparedStatement. Затем этот
объект можно использовать для эффективного многократного
выполнения этого оператора.
!!! Примечание !!!
Методы установки (setShort, setString и т. д.) для установки
значений параметров IN должны указывать типы, совместимые
с определенным типом SQL входного параметра. Например, если
параметр IN имеет тип SQL INTEGER, то следует использовать
метод setInt.
Если требуются произвольные преобразования типов параметров,
следует использовать метод setObject с целевым типом SQL.
В следующем примере установки параметра 'con' представляет
активное соединение:
******************************************************************
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
******************************************************************
Поля и константы, унаследованные от интерфейса java.sql.Statement:
CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED,
KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS,
SUCCESS_NO_INFO
****** Методы ******
void addBatch() - Добавляет набор параметров в пакет команд
этого объекта PreparedStatement.
void clearParameters() - Немедленно очищает текущие значения параметров.
boolean execute() - Выполняет оператор SQL в этом объекте PreparedStatement,
который может быть оператором SQL любого типа.
ResultSet executeQuery() - Выполняет запрос SQL в этом объекте PreparedStatement
и возвращает объект ResultSet, сгенерированный запросом.
int executeUpdate() - Выполняет оператор SQL в этом объекте PreparedStatement,
который должен быть оператором языка манипулирования данными
SQL (DML), например INSERT, UPDATE или DELETE; или оператор
SQL, который ничего не возвращает, например оператор DDL.
ResultSetMetaData getMetaData() - Извлекает объект ResultSetMetaData, содержащий
информацию о столбцах объекта ResultSet, которые
будут возвращены при выполнении этого объекта
PreparedStatement.
ParameterMetaData getParameterMetaData() - Извлекает количество, типы и свойства
параметров этого объекта PreparedStatement.
void setArray(int parameterIndex,
Array x) - Устанавливает назначенный параметр для данного
объекта java.sql.Array.
void setAsciiStream(int parameterIndex,
InputStream x) - Устанавливает назначенный параметр для
данного входного потока.
void setAsciiStream(int parameterIndex,
InputStream x,
int length) - Устанавливает назначенный параметр для данного
входного потока, который будет иметь указанное
количество байтов.
void setAsciiStream(int parameterIndex,
InputStream x,
long length) - Устанавливает назначенный параметр для данного
входного потока, который будет иметь указанное
количество байтов.
void setBigDecimal(int parameterIndex,
BigDecimal x) - Устанавливает указанный параметр в заданное
значение java.math.BigDecimal.
void setBinaryStream(int parameterIndex,
InputStream x) - Устанавливает назначенный параметр для
данного входного потока.
void setBinaryStream(int parameterIndex,
InputStream x,
int length) - Устанавливает назначенный параметр для данного
входного потока, который будет иметь указанное
количество байтов.
void setBinaryStream(int parameterIndex,
InputStream x,
long length) - Устанавливает назначенный параметр для данного
входного потока, который будет иметь указанное
количество байтов.
void setBlob(int parameterIndex,
Blob x) - Задает назначенный параметр для данного объекта java.sql.Blob.
void setBlob(int parameterIndex,
InputStream inputStream) - Устанавливает назначенный параметр в
объект InputStream.
void setBlob(int parameterIndex,
InputStream inputStream,
long length) - Устанавливает назначенный параметр
в объект InputStream.
void setBoolean(int parameterIndex,
boolean x) - Устанавливает указанный параметр в заданное
логическое значение Java.
void setByte(int parameterIndex,
byte x) - Устанавливает указанный параметр в заданное значение
байта Java.
void setBytes(int parameterIndex,
byte[] x) - Устанавливает указанный параметр в заданный массив
байтов Java.
void setCharacterStream(int parameterIndex,
Reader reader) - Устанавливает назначенный параметр
для данного объекта Reader.
void setCharacterStream(int parameterIndex,
Reader reader,
int length) - Устанавливает назначенный параметр для
данного объекта Reader, длина которого
составляет заданное количество символов.
void setCharacterStream(int parameterIndex,
Reader reader,
long length) - Устанавливает назначенный параметр
для данного объекта Reader, длина
которого составляет заданное
количество символов.
void setClob(int parameterIndex,
Clob x) - Устанавливает назначенный параметр для данного
объекта java.sql.Clob.
void setClob(int parameterIndex,
Reader reader) - Устанавливает указанный параметр в объект Reader.
void setClob(int parameterIndex,
Reader reader,
long length) - Устанавливает указанный параметр в объект Reader.
void setDate(int parameterIndex,
Date x) - Устанавливает указанный параметр в заданное значение
java.sql.Date, используя часовой пояс по умолчанию
для виртуальной машины, на которой запущено приложение.
void setDate(int parameterIndex,
Date x,
Calendar cal) - Устанавливает указанный параметр в заданное
значение java.sql.Date, используя данный
объект Calendar.
void setDouble(int parameterIndex,
double x) - Устанавливает указанный параметр в
заданное двойное значение Java.
void setFloat(int parameterIndex,
float x) - Устанавливает указанный параметр в заданное
значение с плавающей запятой Java.
void setInt(int parameterIndex,
int x) - Устанавливает указанный параметр в заданное
значение Java int.
void setLong(int parameterIndex,
long x) - Устанавливает указанный параметр в заданное длинное
значение Java.
void setNCharacterStream(int parameterIndex,
Reader value) - Устанавливает указанный параметр
в объект Reader.
void setNCharacterStream(int parameterIndex,
Reader value,
long length) - Устанавливает указанный параметр
в объект Reader.
void setNClob(int parameterIndex,
NClob value) - Задает назначенный параметр для
объекта java.sql.NClob.
void setNClob(int parameterIndex,
Reader reader) - Устанавливает указанный параметр
в объект Reader.
void setNClob(int parameterIndex,
Reader reader,
long length) - Устанавливает указанный параметр в
объект Reader.
void setNString(int parameterIndex,
String value) - Устанавливает указанный параметр в
данный объект String.
void setNull(int parameterIndex,
int sqlType) - Устанавливает указанный параметр в SQL NULL.
void setNull(int parameterIndex,
int sqlType,
String typeName) - Устанавливает указанный параметр в SQL NULL.
void setObject(int parameterIndex,
Object x) - Устанавливает значение назначенного параметра,
используя данный объект.
void setObject(int parameterIndex,
Object x,
int targetSqlType) - Устанавливает значение назначенного
параметра с данным объектом.
void setObject(int parameterIndex,
Object x,
int targetSqlType,
int scaleOrLength) - Устанавливает значение назначенного
параметра с данным объектом.
void setRef(int parameterIndex,
Ref x) - Устанавливает указанный параметр в заданное
значение REF(<structured-type>).
void setRowId(int parameterIndex,
RowId x) - Устанавливает назначенный параметр для
данного объекта java.sql.RowId.
void setShort(int parameterIndex,
short x) - Устанавливает указанный параметр в заданное
короткое значение Java.
void setSQLXML(int parameterIndex,
SQLXML xmlObject) - Задает указанный параметр для данного
объекта java.sql.SQLXML.
void setString(int parameterIndex,
String x) - Устанавливает указанный параметр в заданное
значение строки Java.
void setTime(int parameterIndex,
Time x) - Устанавливает указанный параметр в заданное
значение java.sql.Time.
void setTime(int parameterIndex,
Time x,
Calendar cal) - Устанавливает указанный параметр в заданное
значение java.sql.Time, используя данный
объект Calendar.
void setTimestamp(int parameterIndex,
Timestamp x) - Устанавливает указанный параметр в
заданное значение java.sql.Timestamp.
void setTimestamp(int parameterIndex,
Timestamp x,
Calendar cal) - Устанавливает указанный параметр в заданное
значение java.sql.Timestamp, используя
данный объект Calendar.
void setUnicodeStream(int parameterIndex,
InputStream x,
int length) - Устарело.
void setURL(int parameterIndex,
URL x) - Устанавливает указанный параметр в заданное
значение java.net.URL.
****** Методы, унаследованные от интерфейса java.sql.Statement ******
addBatch, cancel, clearBatch, clearWarnings, close, closeOnCompletion,
execute, execute, execute, execute, executeBatch, executeQuery,
executeUpdate, executeUpdate, executeUpdate, executeUpdate, getConnection,
getFetchDirection, getFetchSize, getGeneratedKeys, getMaxFieldSize,
getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet,
getResultSetConcurrency, getResultSetHoldability, getResultSetType,
getUpdateCount, getWarnings, isClosed, isCloseOnCompletion, isPoolable,
setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize,
setMaxFieldSize, setMaxRows, setPoolable, setQueryTimeout
****** Методы, унаследованные от интерфейса java.sql.Wrapper ******
isWrapperFor, unwrap
См. более подробно документацию (ENG):
https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html
****** Пример запроса в MySQL ******
**************************************************************************************************
public static void main(String[] args) {
try{
// В данном коде происходит запрос к MySQL базе данных
String url = "jdbc:mysql://localhost/store?serverTimezone=Europe/Moscow&useSSL=false";
String username = "root";
String password = "password";
Scanner scanner = new Scanner(System.in);
// Подключаем MySQL драйвер к нашему приложению
Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
System.out.print("Input product name: ");
String name = scanner.nextLine();
System.out.print("Input product price: ");
int price = scanner.nextInt();
String sql = "INSERT INTO Products (ProductName, Price) Values (?, ?)";
try (Connection my_conn = DriverManager.getConnection(url, username, password);
PreparedStatement preparedStatement = my_conn.prepareStatement(sql)){
preparedStatement.setString(1, name);
preparedStatement.setInt(2, price);
int rows = preparedStatement.executeUpdate();
System.out.printf("%d rows added", rows);
}
}
catch(Exception ex){
System.out.println("Connection failed...");
System.out.println(ex);
}
}
**************************************************************************************************
В данном случае данные вводятся с консоли и затем добавляются в базу данных.
Для создания объекта PreparedStatement применяется метод prepareStatement()
класса Connection. В этот метод передается выражение sql:
**************************************************************************************************
INSERT INTO Products (ProductName, Price) Values (?, ?).
**************************************************************************************************
Это выражение может содержать знаки вопроса ? - знаки подстановки, вместо
которых будут вставляться реальные значения. Чтобы связать отдельные знаки
подстановки с конкретными значениями у класса PreparedStatement определен
ряд методов для различных типов данных. Все методы, которые поставляют
значения вместо знаков подстановки, в качестве первого параметра принимают
порядковый номер знака подстановки (нумерация начинается с 1), а в качестве
второго параметра - собственно значение, которое вставляется вместо знака
подстановки.
Например, первый знак подстановки ? в выражении sql представляет значение
для столбца ProductName, который хранит строку. Поэтому для связи значения
с первым знаком подстановки применяется метод:
preparedStatement.setString(1, name).
Второй знак подстановки должен передавать значение для столбца Price, который
хранит целые числа. Поэтому для вставки значения используется метод:
preparedStatement.setInt(2, price)