Файл: 1. Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 399
Скачиваний: 6
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
javax.sql.DataSource - интерфейс, который предоставляет методы для получения соединения к базе данных из пула соединений.)
Соединение с базой данных описывается классом, реализующим интерфейс java.sql.Connection. Имея соединение с базой данных, можно создавать объекты типа Statement, служащие для исполнения запросов к базе данных на языке SQL.
Существуют следующие виды типов Statement, различающихся по назначению:
-
java.sql.Statement -
java.sql.PreparedStatement -
java.sql.CallableStatement
Интерфейс java.sql.ResultSet предоставляет методы для работы с результатами выполнения SQL-запросов.
5. Для чего нужен DriverManager?
DriverManager используется для установления соединения с базой данных с использованием подходящего драйвера JDBC. Например, для установления соединения с базой данных MySQL можно использовать следующюю команду:
connection = DriverManager.getConnection("url","username","password");
DriverManager обеспечивает загрузку драйверов и создание новых соединений (connection) с базой данных.
DriverManager - это синглтон (Паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа), который содержит информацию о всех зарегистрированных драйверах. Метод getConnection на основании параметра URL находит java.sql.Driver соответствующей базы данных и вызывает у него метод connect.
6. Что такое Statement, PreparedStatement, CallableStatement?
java.sql.Statement — это объект, который используется для выполнения SQL-запросов к БД. (Передаем в него либо Update либо Query.)
Statement создает объект типа ResultSet, который содержит результаты запроса.
Объект Statement создаётся методом Connection.createStatement.
java.sql.PreparedStatement — это объект, который предварительно компилирует SQL-запрос в БД, что позволяет использовать его многократно с разными параметрами. PreparedStatement безопасен от SQL-инъекций и может улучшить производительность при выполнении запросов, которые выполняются многократно с разными значениями параметров.
Позволяет сделать некий шаблон запроса, подставлять в него какое-то значение и использовать его. Безопасен от SQL-инъекций.
java.sql.CallableStatement — (это расширение PreparedStatement, которое) используется для вызова хранимых процедур базы данных, которые могут принимать входные параметры и возвращать выходные параметры.
Добавляет методы для манипуляции выходными параметрами.
(Здесь мы создаем CallableStatement с использованием вызова хранимой процедуры getEmployeeName, которая принимает один входной параметр и возвращает имя сотрудника в виде строки. Затем мы устанавливаем значение для входного параметра и регистрируем выходной параметр. После выполнения хранимой процедуры мы получаем значение выходного параметра и выводим его на консоль.)
Что такое хранимая процедура?
Хранимая процедура - это блок кода, который сохраняется в базе данных и может быть вызван для выполнения на стороне сервера БД. Она может содержать любые операторы SQL, управляющие конструкции, переменные и параметры. Хранимые процедуры создаются и хранятся на сервере БД, и могут быть вызваны клиентским приложением по требованию.
Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности данных.
(Вот пример создания хранимой процедуры на SQL для базы данных MySQL:
Эта хранимая процедура называется get_user и имеет три параметра: user_id - входной параметр типа INT, user_name и user_email - выходные параметры типа VARCHAR(50). Внутри хранимой процедуры выполняется запрос к таблице users, и результаты запроса записываются в переменные user_name и user_email.
После создания хранимой процедуры ее можно вызывать из приложения, используя JDBC CallableStatement, как показано в предыдущем ответе.)
7. Что такое sql-injection?
SQL-инъекция (или SQLi) – уязвимость, которая позволяет атакующему использовать фрагмент вредоносного кода на языке SQL для манипулирования базой данных и получения доступа к потенциально ценной информации. Вредоносный код вставляется в строки, которые позже будут переданы на экземпляр SQL Server для анализа и выполнения. (' or'1'='1)
Как защитить приложение от sql-injection?
Использовать PreparedStatement вместо Statement.
При использовании Statement строки запроса и значений складываются.
Т.к. выражение
or'1'='1' всегда равно true, то даже без указания пароля мы получим все данные.)
При использовании PreparedStatement имеется шаблон запроса и данные в него вставляются, с отражением кавычек.
Т.е. все кавычки были отражены слешем, инъекция не удалась.
Так же можно создать проверки всех вводимых данных – числа, строки, даты, данные в специальных форматах.
Числа
Для проверки переменной на числовое значение используется функция is_numeric(n);, которая вернёт true, если параметр n — число, и false в противном случае.
Строки
Большинство взломов через SQL происходят по причине нахождения в строках «необезвреженных» кавычек, апострофов и других специальных символов. Для такого обезвреживания нужно использовать функцию addslashes($str);, которая возвращает строку $str с добавленным обратным слешем (\) перед каждым специальным символом. Данный процесс называется экранизацией.
(Магические кавычки
Магические кавычки – эффект автоматической замены кавычки на обратный слэш (\) и кавычку при операциях ввода/вывода.)
Отличие Statement от PreparedStatement?
Statement - мы должны заботиться о кавычках в запросе и ставить их там где они нужны.
PreparedStatement - вставляет значения в запрос и за счет методов setString setInt и прочих. Он сам понимает где нужны кавычки, а где нет. Соответственно все входные данных оборачивает ими.
Преимуществ PreparedStatement по сравнению с Statement:
1) PreparedStatement помогает нам предотвратить атаки с использованием SQL-инъекций, поскольку он автоматически экранирует специальные символы.
2) PreparedStatement позволяет нам выполнять динамические запросы с вводом параметров.
3) PreparedStatement предоставляет различные типы методов установки для установки входных параметров запроса.
4) PreparedStatement быстрее, чем Statement. Это становится более заметным, когда мы повторно используем PreparedStatement или используем его методы пакетной обработки для выполнения нескольких запросов.
5) PreparedStatement помогает нам писать
объектно-ориентированный код с помощью методов установки, тогда как с Statement мы должны использовать конкатенацию строк для создания запроса. Если необходимо установить несколько параметров, написание запроса с использованием конкатенации строк выглядит очень некрасиво и подвержено ошибкам.
8. Что такое ResultSet? Как с ним работать?
Что такое ResultSet?
Интерфейс ResultSet — представляет собой результат выполнения запроса к базе данных. Он содержит набор строк, который может быть получен и обработан по одной строке за раз. (Внутри него таблица.)
ResultSet позволяет перемещаться по строкам результата, извлекать данные из столбцов и выполнять другие операции над полученными данными.
Это интерфейс, который предоставляет методы для работы с результатами выполнения SQL-запросов. Экземпляры этого элемента содержат данные, которые были получены в результате выполнения SQL – запроса. Он работает как итератор и “пробегает” по полученным данным. Объект с результатом запроса, который вернула база. Внутри него таблица.
Как с ним работать?
Для работы с ResultSet необходимо выполнить следующие шаги:
1) Создать объект Statement или PreparedStatement, который будет использоваться для выполнения запроса к базе данных.
2) Выполнить запрос к базе данных, используя созданный объект Statement или PreparedStatement.
3) Получить объект ResultSet из выполненного запроса, вызвав метод executeQuery() на объекте Statement или PreparedStatement.
4) Обработать результат, перемещаясь по строкам ResultSet, извлекая данные из столбцов и выполняя другие операции над полученными данными.
(Пример кода для работы с ResultSet:
В этом примере мы создаем соединение к базе данных, создаем объект Statement, выполняем запрос к базе данных и получаем объект ResultSet. Затем мы перемещаемся по строкам ResultSet, извлекаем данные из столбцов и выводим их на консоль.)
Как с помощью R