Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection_servlets.doc
Скачиваний:
30
Добавлен:
23.02.2016
Размер:
356.35 Кб
Скачать

Завершення з’єднання

Для явного завершення з’єднання викликається методи closeкласів ResultSet, Statement, Connection. Якщо в подальшому необхідно виконати ще які-небудь дії з БД, цей етап слід відкласти, оскільки витрати на відкриття з’єднання порівняно великі.

Важливість закриття з’єднань являється важливим питанням, оскільки для кожного сервера баз даних існує деяка максимальна кількість одночасних з’єднань з базою.mysql дозволяє безболісно плодити незакриті з'єднання (він їх самзнищуєз часом), Oracle навпаки - число Connection у нього обмежено (це обмеження на к-ть клієнтів), тому вичерпавши к-ть Connection'ів Ви можете "повісити" свій додаток. Лікується така ситуація лише пере запуском служб сервера баз даних (як правило перезапуском сервера-компю’тера).

Приклад:

import javax.servlet.http.*;

import javax.servlet.*;

import java.io.*;

import java.sql.*;

public class AutoCatalog extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

PrintWriter out = response.getWriter();

try {

Class.forName("org.gjt.mm.mysql.Driver"); //назва класу для драйвера

}

catch (ClassNotFoundException e) {

out.println("Error loading driver: " + e);

}

String host = "localhost";

String dbName = "AutoBase";

int port = 3306;

String URL = "jdbc:mySQL://" + host + ":" + port + "/" + dbName;

String username = "root";

String password = "SuperPass";

try {

Connection connection = DriverManager.getConnection(URL, username, password);

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery("SELECT * from Autos");

while(resultSet.next()) {

//ваші дії з елементами результуючої таблиці

}

resultSet.close();

statement.close();

connection.close();

}

catch (SQLException e) {

out.println(e);

}

}

}

Попередньо відкомпільовані (підготовлені) запити

При необхідності виконання схожих SQL-операторів декілька разів використання підготовлених операторів виявляється більш ефективнішим, ніж виконання кожного разу одного і того ж оператора із різними значеннями параметрів. Створюється параметризований оператор стандартного виду, який надсилається БД на компіляцію перед тим, як він використовуватиметься.Для позначення місць у запиті, де підставлятимуться реальні значення параметрів, використовують знаки питання. Кожного разу при використанні підготовлених операторів достатньо замінити один з параметрів за допомогою методів setXxx. Потім викликається метод executeQuery або executeUpadate.

Приклад:

Connection connection = DriverManager.getConnection(URL, username, password);

String Template = “UPDATE employees SET Salary = ? WHERE id = ?”;

PrearedStatement statement = connection.prepareStatement(template);

Float[] newSalaries = getNewSalaries();

Int[] employeeIDs = getIDs();

for(int i=0; i<employeeIDs.length; i++) {

statement.setFloat(1, newSalaries[i]);

statement.setInt(2, employeeIDs[i]);

statement.execute();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]