Файл: 1. Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 268

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Некоторые из преимуществ PreparedStatement по сравнению с Statement:

  1. PreparedStatement помогает нам предотвратить атаки с использованием SQL-инъекций, поскольку он автоматически экранирует специальные символы.

  2. PreparedStatement позволяет нам выполнять динамические запросы с вводом параметров.

  3. PreparedStatement предоставляет различные типы методов установки для установки входных параметров запроса.

  4. PreparedStatement быстрее, чем Statement. Это становится более заметным, когда мы повторно используем PreparedStatement или используем его методы пакетной обработки для выполнения нескольких запросов.

  5. PreparedStatement помогает нам писать объектно-ориентированный код с помощью методов установки, тогда как с Statement мы должны использовать конкатенацию строк для создания запроса. Если необходимо установить несколько параметров, написание запроса с использованием конкатенации строк выглядит очень некрасиво и подвержено ошибкам.

Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности данных.

Вместо хранения часто используемого запроса, клиенты могут ссылаться на соответствующую хранимую процедуру. При вызове хранимой процедуры её содержимое сразу же обрабатывается сервером.

Кроме собственно выполнения запроса, хранимые процедуры позволяют также производить вычисления и манипуляцию данными — изменение, удаление, выполнять DDL-операторы (не во всех СУБД!) и вызывать другие хранимые процедуры, выполнять сложную транзакционную логику. Один-единственный оператор позволяет вызвать сложный сценарий, который содержится в хранимой процедуре, что позволяет избежать пересылки через сеть сотен команд и, в особенности, необходимости передачи больших объёмов данных с клиента на сервер.
7. Что такое sql-injection?

SQL инъекция — это один из самых доступных способов взлома сайта.

Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (
например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах.


Суть таких инъекций – внедрение в данные (передаваемые через
GET, POST запросы или значения Cookie) произвольного SQL кода. Если сайт уязвим и выполняет такие инъекции, то по сути есть возможность творить с БД (чаще всего это MySQL) что угодно.

Проверять нужно всё – числа, строки, даты, данные в специальных форматах.
Числа


Для проверки переменной на числовое значение используется функция
is_numeric(n); , которая вернёт true, если параметр n — число, и false в противном случае.
Строки


Большинство взломов через
SQL происходят по причине нахождения в строках «необезвреженных» кавычек, апострофов и других специальных символов. Для такого обезвреживания нужно использовать функцию addslashes($str);, которая возвращает строку $str с добавленным обратным слешем (\) перед каждым специальным символом. Данный процесс называется экранизацией.

Магические кавычки



Магические кавычки – эффект автоматической замены кавычки на обратный слэш (\) и кавычку при операциях ввода/вывода.



  1. Что такое ResultSet? Как с ним работать? Итерируемый интерфейс,


ResultSet result = statement.executeQuery("select * from people");

while(result.next())

Интерфейс Java JDBC ResultSet представляет результат запроса к базе данных. Текст о запросах показывает, как результат запроса возвращается как java.sql.ResultSet.  Обеспечивает приложению построчный доступ к результатам запросов. При обработке запроса 

ResultSet поддерживает указатель на текущую обрабатываемую строку.

Доступ к данным ResultSet обеспечивает посредством набора get-методов, которые организуют доступ к колонкам текущей строки. Метод ResultSet.next используется для перемещения к следующей строке ResultSet, делая ее текущей.

Метод

Описание

public boolean absolute(int row) throws SQLException

Метод перемещает курсор на заданное число строк от начала, если число положительно, и от конца - если отрицательно

public void afterLast() throws SQLException

Этот метод перемещает курсор в конец результирующего набора за последнюю строку

public void beforeFirst() throws SQLException

Этот метод перемещает курсор в начало результирующего набора перед первой строкой

public void deleteRow() throws SQLException

Удаляет текущую строку из результирующего набора и базы данных

public ResultSetMetaData getMetaData() throws SQLException

Предоставляет объект метаданных для данного ResultSet. Класс ResultSetMetaData содержит информацию о результирующие таблице, такую как количество столбцов, их заголовок и т.д.

public int getRow() throws SQLException

Возвращает номер текущей строки

public Statement getStatement() throws SQLException

Возвращает экземпляр Statement, который произвел данный результирующий набор

public boolean next() throws SQLException
public boolean previous() throws SQLException

Эти методы позволяют переместиться в результирующем наборе на одну строку вперед или назад. Во вновь созданном результирующем наборе курсор устанавливается перед первой строкой, поэтому первое обращение к методу next() влечет позиционирование на первую строку. Эти методы возвращают true, если остается строка для дальнейшего перемещения. Если строк для обработки больше нет, возвращается false. Если открыт поток InputStream для предыдущей строки, он закрывается. Также очищается цепочка предупреждений SQLWarning

public void close() throws SQLException

Осуществляет немедленное закрытие ResultSet вручную. Обычно этого не требуется, так как закрытие Statement, связанного с ResultSet, автоматически закрывает ResultSet. К сожалению, не все разработчики JDBC-драйверов придерживаются этих концепций, например, драйвер Oracle самостоятельно не закрывает ResultSet'ы, так что настоятельно рекомендуется закрывать вручную


result.getByte("columnName");

result.getBytes("columnName");

result.getCharacterStream("columnName");

result.getClob("columnName");

result.getDate("columnName");

result.getDouble("columnName");

result.getFloat("columnName");

result.getInt("columnName");

result.getLong("columnName");

result.getNCharacterStream("columnName");

result.getObject("columnName");

result.getRef("columnName");

result.getRowId("columnName");

result.getShort("columnName");

result.getSQLXML("columnName");

result.getString("columnName");

result.getTime("columnName");

result.getTimestamp("columnName");

result.getUnicodeStream("columnName");

result.getURL("columnName");
Как получить из ResultSet нужное поле в нужной колонке нужной строки?

ResultSet содержит так называемый курсор, который позиционируется на текущей строке данных. При вызове метода next, курсор перемещается на следующую строку.

При открытии набора данных ResultSet курсор расположен перед первой строкой, и первый вызов next передвигает его на первую строку.

ResultSet хранит курсор до самого закрытия или пока не закроется родительский объект Statement.

Методы ResultSet.getXXX предоставляют доступ к значениям в колонках в текущей строке. В пределах одной строки значения могут быть считаны в любом порядке. Для обеспечения бо́льшей совместимости рекомендуется считывать их подряд слева направо и делать это только один раз. Для указания колонки можно использовать либо ее имя, либо ее номер. Например, если вторая колонка объекта ResultSet rs называется "title" и хранит строковое значение, то извлечь его можно одним из двух способов:
String s = rs.getString("title");

String s = rs.getString(2);
9.
Рассказать про паттерн DAO.
Паттерн DAO предназначен для отделения взаимодействия с хранилищем данных от бизнес-логики приложения. Т.е. вся логика, отвечающая за сохранение, изменение, извлечение сущностей выносится в отдельные DAO-классы, а код, инкапсулирующий бизнес-логику приложения (т.н. сервисы), взаимодействует с этими классами, а не непосредственно с хранилищем данных.
Data Access Object это паттерн, подразумевающий абстрагирование всей работы с базой данных в отдельном слое.


  • Используется для абстрагирования и инкапсулирования доступа к источнику данных,

  • управляет соединением с источником данных для получения и записи данных,

  • реализует необходимый для работы с источником данных механизм доступа.

  • выполняет функцию адаптера между компонентом и источником данных.

Главная задача шаблона DAO - построить мост между реляционной и объектной моделями данных. ИнтерфейсDao определяет абстрактный API, который выполняет операции CRUD с объектами типаT.





есть общая тенденция думать, что выпуск JPA снизил функциональность шаблона DAO до нуля, поскольку шаблон становится просто еще одним уровнем абстракции и сложности, реализованным поверх уровня, предоставляемого менеджером сущностей JPA.


  1. Что такое JPA?


JPA (Java Persistence API) это спецификация Java EE и Java SE, описывающая систему управления сохранением java объектов в таблицы реляционных баз данных в удобном виде. Сама Java не содержит реализации JPA, однако существует много реализаций данной спецификации от разных компаний (открытых и нет). Это не единственный способ сохранения java объектов в базы данных (ORM систем), но один из самых популярных в Java мире.


  1. Что такое ORM?