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

Формування jdbc-url-рядка

У найзагальнішому випадку цей рядок має вигляд:

jdbc:id_бази:параметри

У разі MySql вона має вигляд:

jdbc:mysql://хост/база?user=пользователь

Наприклад:

jdbc:mysql://127.0.0.1/GENERAL?user=root

УВАГА! Необхідний відступ з приводу "особливостей" роботи драйверів mysql. Для підключення необхідна передача login/password в JDBC драйвер, проте JDBC-драйвера MySql які мені зустрічалися, сриймали тільки login прописаний в рядку JDBC-URL і ніякими іншими способами примусити сприйняти драйвер необхідні параметри не вийшло.

Отримання екземпляра об’єкта класу Connection

Для отримання Connection Ви повинні викликати DriverManager.getConnection() і передати у всередину login/password/jdbc-url:

String url="jdbc:mysql://127.0.0.1/GENERAL?user=root";

String user="";

String password="";

Connection c=null;

try{

c=DriverManager.getConnection(url,user,password);

} catch(SQLException e)

{

System.out.println("Exception getting connection: "+e);

}

Формування sql запиту

На даному етапі все просто - Вам необхідно сформувати звичайну SQL команду, наприклад:

String str="select * from Mytable";

String str="insert into Mytable (name,cnt) values ('"+name+"',"+cnt+"')";

Виконання і обробка sql-запиту

Для виконання запиту ми повинні у екземпляра об’єкта класа Connection одержати Statement і викликати один з його методів залежно від типу запиту:

public int executeUpdate(String sql) throws SQLException

Застосовується для SQL команд INSERT, UPDATE або DELETE. Повертає к-ть рядків над якими виконалася операція.

public ResultSet executeQuery(String sql) throws SQLException

Застосовується для SQL команди SELECT. Повертає ResultSet з якого можна витягнути інформація про шапку таблиці (ResultSetMetaData) і самі значення. Як це робиться буде показаний нижче в прикладі.

public boolean execute(String sql) throws SQLException

Даний метод повертає true/false - выполнился/не виконався запит. Застосовується в тих випадках коли SQL запит повертає декілька ResultSet'ів. Для їх отримання використовуйте getMoreResults().

Приклад:

String str="SELECT * FROM RASHOD WHERE USER_ID="+user;

System.out.println(str);

Statement statement = c.createStatement(); // створюємо оператор

ResultSet rs = statement.executeQuery(str); // виконуємо запит

ResultSetMetaData md = rs.getMetaData();

int cnt= md.getColumnCount(); // одержуємо к-ть колонок (1..cnt)

int row=0;

while(rs.next())

{

row++;

System.out.println("Row "+row); // висновок номера рядка в базі

for(int i = 1; i <= cnt; i++)

{ String name=md.getColumnName(i); // получаємо ім'я колонки

String val=rs.getString(i); // одержуємо значення

System.out.println(name+"="+val); // виводимо ім'я і значення поля

}

}

УВАГА! Застосовуйте executeUpdate/executeQuery/execute тоді коли вони доречні - не викликайте executeQuery для INSERT'а !!!

Закриття одержаних з'єднань (ResultSet, Statament, Connection)

У кожного з вказаних об’єктів них є метод

close();

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