понедельник, 31 мая 2010 г.

Selenium + JAVA: полезности 2

В продолжение предыдущего поста, делаем логику «поинтереснее».

Те, кто читал комментарии, думаю, видели, что без полезных советов не обошлось. И это очень радует. Выражаю благодарность Алексею Булату за очень полезный, а главное бесплатный совет:

«не буду вдаваться в подробности обработки исключений в джава, лишь скажу, что может плохого сделать Ваш код:
В случае, если исключение (Exception) случиться в одной из следующих строк кода:
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("[запрос к БД]");
stmt.close();

строка con.close(); не выполнится, а следовательно соединение с базой не будет закрыто. Таким образом вы можете случайно открыть слишком много соединений и тем самым повалить, скажем базу :). Поэтому, рекомендуется закрывать коннект в блоке finally, который вызывается всегда.

Вот.»

Провела работу над ошибками, и код для запросов к БД чуть-чуть изменился.

import java.sql.*;

public class Query{

public static void main(String[] args){

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

try{

//загружаем класс драйвера

Class.forName("com.mysql.jdbc.Driver");

//создаем соединение с БД

con = DriverManager.getConnection("[урл БД]", "[пароль]","[логин]");

stmt = con.createStatement();

//выполняем запрос

rs = stmt.executeQuery("[sql запрос]");

while (rs.next()){

[пользуемся активно результатами запроса]

}

rs.close();

stmt.close();

con.close();

}

//Ловись рыбка

catch(java.lang.ClassNotFoundException e){

System.err.print("ClassNotFoundException: ");

System.err.println(e.getMessage());

}

catch(SQLException ex){

System.err.println("SqlException: " + ex.getMessage());

}

finally {

//Что-то пошло не так? Все проверим!

try {

if (rs != null){

rs.close();

}

if (stmt != null) {

stmt.close();

}

if (con != null) {

con.close();

}

}

catch (SQLException ex) {

ex.printStackTrace();

System.err.println("SqlException: " + ex.getMessage());

}

}

}

}

А теперь представьте: вы сотворили что-то грандиозное, используя связку Selenium IDE + JAVA, а если еще и результаты работы этого «чуда» на почту отправлять, а? Это же полезность еще та! Опять же не без помощи коллективного разума (форум + опытный разработчик) «оно ожило»:

import java.util.Properties;

import javax.mail.*;

import javax.mail.internet.*;

public class Mail {

public static void main( String[] args )

{

// пример для отправителя с gmail.com!!!

final String username = "[почта отправителя]";

final String password = "[пароль]";

Properties props = new Properties();

props.put("mail.smtp.host", "smtp.gmail.com");

props.put("mail.smtp.socketFactory.port", "465");

props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

props.put("mail.smtp.auth", "true");

props.put("mail.smtp.port", "465");

Session session = Session.getDefaultInstance(props,

new javax.mail.Authenticator()

{

protected PasswordAuthentication getPasswordAuthentication()

{ return new PasswordAuthentication(username,password); }

});

try {

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress("[почта отправителя"));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse("[почта получателя]"));

message.setSubject("Test Subject!");

message.setText("Test message!");

Transport.send(message);

System.out.println("Done");

} catch (MessagingException e) {

throw new RuntimeException(e);

}

}

}

Надеюсь кому-нибудь, да пригодится. Да и мне как «мемори стик» будет!

Удач и новых свершений!