API подключения к базе данных Java (JDBC) — это серия интерфейсов, которые позволяют программистам Java получать доступ к базам данных. Интерфейсы разных разработчиков не совсем одинаковы. После многих лет использования Oracle JDBC я накопил множество навыков, которые позволяют нам лучше использовать производительность системы и выполнять больше функций.
1. Использование тонких драйверов при разработке клиентского программного обеспечения
. Что касается разработки программного обеспечения Java, база данных Oracle предоставляет четыре типа драйверов, два из которых используются для клиентского программного обеспечения, такого как прикладное программное обеспечение, апплеты и сервлеты, а два других используются для. клиентское программное обеспечение, такое как прикладное программное обеспечение, апплеты и сервлеты. Серверное программное обеспечение, такое как хранимые процедуры Java в базах данных. При разработке клиентского программного обеспечения мы можем выбрать драйвер OCI или тонкий драйвер. Драйвер OCI использует интерфейс локализации Java (JNI) для связи с базой данных через клиентское программное обеспечение Oracle. Драйвер Thin — это чистый драйвер Java, который напрямую взаимодействует с базой данных. Для максимальной производительности Oracle рекомендует использовать драйверы OCI при разработке клиентского ПО, и это кажется правильным. Но я рекомендую использовать драйвер Thin, поскольку в результате многих тестов было обнаружено, что производительность драйвера Thin превышает производительность драйвера OCI при нормальных обстоятельствах.
2. Отключите функцию автоматической отправки для повышения производительности системы.
При первом подключении к базе данных соединение по умолчанию находится в режиме автоматической отправки. Для повышения производительности вы можете отключить функцию автофиксации, вызвав метод setAutoCommit() класса Connection с логическим параметром false следующим образом:
conn.setAutoCommit(false);
Стоит отметить, что после отключения функции автофиксации
;нам нужно вручную управлять транзакцией, вызывая методы commit() иrollback() класса Connection.
3. Используйте объекты Statement в динамических командах SQL или ограниченных по времени командах
. При выполнении команд SQL у нас есть два варианта: вы можете использовать объекты ReadedStatement или объекты Statement. Независимо от того, сколько раз вы используете одну и ту же команду SQL, ReadyStatement анализирует и компилирует ее только один раз. При использовании объекта Statement каждый раз при выполнении команды SQL она анализируется и компилируется. Это может заставить вас подумать, что использование объектов ReadedStatement выполняется быстрее, чем использование объектов Statement. Однако проведенное мною тестирование показывает, что в клиентском программном обеспечении это не так. Поэтому в ограниченных по времени операциях SQL, если команды SQL не обрабатываются пакетно, нам следует рассмотреть возможность использования объектов Statement.
Кроме того, использование объектов Statement также упрощает написание динамических команд SQL, поскольку мы можем объединять строки для создания допустимой команды SQL. Поэтому я считаю, что объект Statement может упростить создание и выполнение динамических команд SQL.
4. Используйте вспомогательную функцию для форматирования динамических команд SQL.
При создании динамических команд SQL, выполняемых с использованием объектов Statement, нам приходится иметь дело с некоторыми проблемами форматирования. Например, если мы хотим создать команду SQL, которая вставляет имя О'Рейли в таблицу, мы должны заменить знак «'» в O'Reilly двумя последовательными знаками «''». Лучший способ выполнить эти задачи — создать вспомогательный метод, выполняющий операцию замены, а затем использовать созданный вспомогательный метод, когда строка подключения выражается в виде команды SQL с использованием формулы. Точно так же мы можем заставить вспомогательный метод принимать значение даты, а затем выводить строковое выражение на основе функции Oracle to_date().
5. Используйте объекты «PreparedStatement» для повышения общей эффективности базы данных.
При использовании объектов «PreparedStatement» для выполнения команд SQL команды анализируются и компилируются базой данных, а затем помещаются в буфер команд. Затем при каждом выполнении того же объекта ReadedStatement он будет снова анализироваться, но не компилироваться повторно. Предварительно скомпилированные команды находятся в буфере и могут быть использованы повторно. В приложениях уровня предприятия с большим количеством пользователей одни и те же команды SQL часто выполняются неоднократно. Уменьшение количества компиляций, вызванное использованием объектов ReadedStatement, может повысить общую производительность базы данных. Если создание, подготовка и выполнение задач «PreparedStatement» на стороне клиента не занимают больше времени, чем задачи «Statement», я бы рекомендовал использовать объекты «PreparedStatement» во всех случаях, за исключением динамических команд SQL.
6. Используйте объекты ReadedStatement для пакетной обработки повторяющихся операций вставки или обновления.
Если вы обрабатываете операции вставки и обновления в пакетном режиме, вы можете значительно сократить время, необходимое для их выполнения. Statement и CallableStatement, предоставляемые Oracle, на самом деле не поддерживают пакетную обработку. Только объект ReadableStatement действительно поддерживает пакетную обработку. Мы можем выбрать стандартную пакетную обработку JDBC, используя методы addBatch() и ExecuteBatch(), или выбрать более быстрый собственный метод Oracle, используя метод setExecuteBatch() объекта ReadyStatement и стандартный метод ExecuteUpdate(). Чтобы использовать собственный механизм пакетной обработки Oracle, вы можете вызвать setExecuteBatch() следующим образом:
ReadyStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate()
}
Значение, указанное при вызове setExecuteBatch; () — верхний предел. При достижении этого значения автоматически запускается выполнение SQL-команды, а стандартный метод ExecuteUpdate() будет отправлен в базу данных как пакетный процесс. Мы можем передать пакетные задачи в любое время, вызвав метод sendBatch() класса ReadyStatement.
7. Используйте метод локатора Oracle для вставки и обновления больших объектов (LOB).
Класс ReadedStatement Oracle не полностью поддерживает обработку больших объектов, таких как BLOB и CLOB. В частности, драйвер Thin не поддерживает настройку с помощью setObject(). и setBinaryStream() объекта ReadedStatement. Значение BLOB не поддерживает установку значения CLOB с помощью метода setCharacterStream(). Только методы в самом локаторе могут получать значения типа LOB из базы данных. Вы можете использовать объекты ReadupedStatement для вставки или обновления больших объектов, но вам нужно использовать локатор, чтобы получить значение большого объекта. Из-за этих двух проблем я рекомендую использовать метод локатора для вставки, обновления или получения значений больших объектов.
8. Используйте синтаксис SQL92 для вызова хранимых процедур
. При вызове хранимых процедур мы можем использовать SQL92 или Oracle PL/SQL. Использование Oracle PL/SQL не имеет никакой практической пользы и создаст проблемы разработчикам, которые будут поддерживать ваше приложение. в будущем возникают проблемы, поэтому я рекомендую использовать SQL92 при вызове хранимых процедур.
9. Используйте Object SQL для переноса схемы объекта в базу данных.
Поскольку базу данных Oracle можно использовать как объектно-ориентированную базу данных, вы можете рассмотреть возможность переноса объектно-ориентированной схемы из приложения в базу данных. Текущий подход заключается в создании Java-компонентов в виде замаскированных объектов базы данных, отображении их свойств в реляционные таблицы, а затем добавлении методов к этим компонентам. Хотя в Java с этим нет проблем, поскольку операции выполняются вне базы данных, другое прикладное программное обеспечение, обращающееся к базе данных, не может воспользоваться преимуществами объектной модели. Если вы воспользуетесь преимуществами объектно-ориентированной технологии Oracle, вы сможете смоделировать ее данные и операции в базе данных, создав новый тип объекта базы данных, а затем использовать такие инструменты, как JPublisher, для создания собственных классов Java-компонентов. Если вы используете этот метод, не только приложения Java могут использовать объектную модель прикладного программного обеспечения, но и другое прикладное программное обеспечение, которому необходимо совместно использовать данные и операции в вашем приложении, также может использовать объектную модель прикладного программного обеспечения.
10. Используйте SQL для выполнения операций в базе данных.
Самый важный опыт, который я хочу вам представить, — это в полной мере использовать наборно-ориентированный подход SQL для решения задач обработки базы данных, а не использовать процедурные языки программирования, такие как Java.
Если бы программисту пришлось искать множество строк в одной таблице, каждая строка результата искала бы данные в других таблицах. Наконец, программист создал отдельные команды UPDATE для пакетного обновления данных в первой таблице. Подобную задачу можно выполнить с помощью команды UPDATE, используя подзапрос с несколькими столбцами в предложении set. Зачем позволять данным перемещаться по Интернету, если можно выполнить задачу с помощью одной команды SQL? Я рекомендую пользователям тщательно изучить, как максимально использовать возможности SQL.
Автор: picva Источник: Технологическое сообщество CCID