Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 402

Ильдар Шаукатович Хабибуллин

}

Методы интерфейса ResultSetMetaData позволяют узнать количество полученных столбцов, их имена и типы, название таблицы, имя ее владельца и прочие сведения о представленных в объекте rs сведениях.

Если объект st получен методом

Statement st = con.createStatement(ResultSet.TYPE SCROLL SENSITIVE,

ResultSet.CONCUR_UPDATABLE) ;

то можно перейти к предыдущему элементу выборки методом previous (), к первому элементу — методом first(), к последнему — методом last(). Можно также модифицировать объект rs методами updateXxx () и даже изменять, удалять и добавлять соответствующие строки базы данных. Не все драйверы обеспечивают эти возможности, поэтому надо проверить реальный тип объекта rs методами rs.getType() и

rs.getConcurrency().

Интерфейс Statement расширен интерфейсом PreparedStatement, позволяющим создавать предварительно откомпилированный запрос, перед выполнением которого можно задавать аргументы методами setXxx ().

Интерфейс PreparedStatement, в свою очередь, расширен интерфейсом CallableStatement, в котором описаны методы выполнения хранимых процедур.

В листинге 25.1 приведен типичный пример запроса к базе Oracle через драйвер Oracle Thin. Апплет выводит в окно браузера четыре поля ввода для адреса базы, имени и пароля пользователя, и запроса. По умолчанию формируется запрос к стартовой базе Oracle, расположенной на локальном компьютере. Результат запроса выводится в окно браузера.

Листинг 25.1. Апплет, обращающийся к базе Oracle

import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; import java.sql.*;

public class JdbcApplet extends Applet implements ActionListener, Runnable{ private TextField tf1, tf2, tf3; private TextArea ta; private Button b1, b2;

private String url = "jdbc:oracle:thin:@localhost:1521:ORCL",

login = "scott", password = "tiger",

query = "SELECT * FROM dept"; private Thread th; private Vector results;

public void init(){

setBackground(Color.white); try{

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); }catch(SQLException e){

System.err.println(e);

}

setLayout(null);

setFont(new Font("Serif", Font.PLAIN, 14));

Label 11 = new Label("URL базы:”, Label.RIGHT);

11. setBounds(20, 30, 70, 25); add(l1);

Label l2 = new Labe1(пИмя:п, Label.RIGHT);

12. setBounds(20, 60, 70, 25); add(l2);

Label l3 = new Labe1(пПароль:п, Label.RIGHT);

13. setBounds(20, 90, 70, 25); add(l3); tf1 = new TextField(url, 30);

tf1.setBounds(100, 30, 280, 25); add(tf1); tf2 = new TextField(login, 30); tf2.setBounds(100, 60, 280, 25); add(tf2); tf3 = new TextField(password, 30); tf3.setBounds(100, 90, 280, 25); add(tf3); tf3.setEchoChar('*');

Label l4 = new Labe1(,,Запрос:,,, Label.LEFT);

14. setBounds(10, 120, 70, 25); add(l4);

ta = new TextArea(query, 5, 50, TextArea.SCROLLBARS NONE); ta.setBounds(10, 150, 370, 100); add(ta);

Button b1 = new Button(,,Отправить,,); b1.setBounds(280, 260, 100, 30); add(b1); b1.addActionListener(this);

}

public void actionPerformed(ActionEvent ae){ url = tf1.getText();

login = tf2.getText();