Файл: 1. Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 887
Скачиваний: 13
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
javax.sql.DataSource - интерфейс, который предоставляет методы для получения соединения к базе данных из пула соединений.)Соединение с базой данных описывается классом, реализующим интерфейс java.sql.Connection. Имея соединение с базой данных, можно создавать объекты типа Statement, служащие для исполнения запросов к базе данных на языкеSQL.Существуют следующие виды типов Statement, различающихся по назначению:
Позволяет сделать некий шаблон запроса, подставлять в него какое-то значение и использовать его. Безопасен от 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 для манипулирования базой данных и получения доступа к потенциально ценной информации. Вредоносный код вставляется в строки, которые позже будут переданы на экземпляр SQLServer для анализа и выполнения. (' 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
-
java.sql.Statement -
java.sql.PreparedStatement -
java.sql.CallableStatement
Позволяет сделать некий шаблон запроса, подставлять в него какое-то значение и использовать его. Безопасен от 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 для манипулирования базой данных и получения доступа к потенциально ценной информации. Вредоносный код вставляется в строки, которые позже будут переданы на экземпляр SQLServer для анализа и выполнения. (' 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