Читать «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();