Источник статьи: Форум базы данных Автор: jackma
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(ложь);
Стоит отметить, что после отключения функции автоматической фиксации нам необходимо вручную управлять транзакцией, вызывая методы 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. Используйте объекты ReadedStatement для повышения общей эффективности базы данных.
При использовании объекта ReadedStatement для выполнения команды SQL команда анализируется и компилируется базой данных, а затем помещается в командный буфер. Затем при каждом выполнении того же объекта ReadedStatement он будет снова анализироваться, но не компилироваться повторно. Предварительно скомпилированные команды находятся в буфере и могут быть использованы повторно. В приложениях корпоративного уровня с большим количеством пользователей одни и те же команды SQL часто выполняются повторно. Уменьшение количества компиляций, вызванное использованием объектов ReadedStatement, может повысить общую производительность базы данных. Если создание, подготовка и выполнение задач «PreparedStatement» на стороне клиента не занимают больше времени, чем задачи «Statement», я бы рекомендовал использовать объекты «PreparedStatement» во всех случаях, за исключением динамических команд SQL.
6. Используйте объекты ReadedStatement при пакетной обработке повторяющихся операций вставки или обновления <br /> <br /> Если операции вставки и обновления обрабатываются пакетно, время, необходимое для их выполнения, можно значительно сократить. Statement и CallableStatement, предоставляемые Oracle, на самом деле не поддерживают пакетную обработку. Только объект ReadableStatement действительно поддерживает пакетную обработку. Мы можем выбрать стандартную пакетную обработку JDBC, используя методы addBatch() и ExecuteBatch(), или выбрать более быстрый собственный метод Oracle, используя метод setExecuteBatch() объекта ReadyStatement и стандартный метод ExecuteUpdate(). Чтобы использовать собственный механизм пакетной обработки Oracle, вы можете вызвать setExecuteBatch(), как показано ниже:
ReadedStatement pstmt3D null;
пытаться {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}