Связь с базами данных через JDBC
Листинг П.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 tfl, tf2, tf3; private TextArea ta; private Button b1, b2; private String url = "jdbc:oracle:thin:Slocalhost: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.j dbc.driver.OracleDriver()); }catch(SQLException e){ System.err.println(e); } setLayout(null); setFont(new Font("Serif", Font.PLAIN, 14)); Label l1 = new Label("URL базы:", Label.RIGHT); 11.setBounds(20, 30, 70, 25); add(ll); Label 12 = new Label("Имя:", Label.RIGHT); 12.setBounds(20, 60, 70, 25); add(12); Label 13 = new Label("Пароль:", Label.RIGHT); 13.setBounds(20, 90, 70, 25); add(13); tfl = new TextField(url, 30); tfl.setBounds(100, 30, 280, 25); add(tfl); 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 14 = new Label("Запрос:", Label.LEFT); 14.setBounds(10, 120, 70, 25); add(14); ta = new TextArea(query, 5, 50, TextArea.SCROLLBARS_NONE); ta.setBounds(10, 150, 370, 100); add(ta); Button bl = new Button("Отправить"); bl.setBounds(280, 260, 100, 30); add(bl); b1.addActionListener(this); } public void actionPerformed(ActionEvent ae){ url = tfl.getText(); login = tf2.getText(); password = tf3.getText(); query = ta.getText(); if (th == null){ th = new Thread(this); th .start (); } } public void run(){ try{ Connection con = DriverManager.getConnection(url, login, password); Statement st = con.createStatement(); ResultSet rs = st.executeQuery(query); ResultSetMetaData rsmd = rs.getMetaData(); // Узнаем число столбцов int n = rsmd.getColumnCount(); results = new Vector(); while (rs.nextOH String s = " "; // Номера столбцов начинаются с 1! for (int i = 1; i <= n; i++) s += " " + rs.getObject(i); results.addElement(s); } rs.close(); st.close (); con.closet); repaint(); }catch(Exception e){ System, err.println(e); } repaint(); } public void paint(Graphics g)( if (results == null){ g.drawstring("Can't execute the query", 5, 30); return; } int у = 30, n = results.size(); for (int i = 0; i < n; i++) g.drawString((String)results.elementAt(i), 5, у += 20); } }
Замечание по отладке
В главе 19 упоминалось, что для отладки сетевой программы удобно запустить и клиентскую, и серверную часть на одном компьютере, обращаясь к серверной части по адресу 127.0.0.1 или доменному имени localhost. He забывайте, что апплет может связаться по сети только с тем хостом, откуда он загружен. Следовательно, на компьютере должен работать Web-сервер. Если Web-сервер прослушивает порт 8080, то, чтобы загрузить HTML-страницу с апплетом, надо в браузере указывать адрес URL вида http://localhost:8080/public/JdbcApplet.html. При этом учтите, что Web-сервер устанавливает свою иерархию каталогов, и каталог public на самом деле может быть каталогом usr/local/http/public или каким-нибудь другим.
Таким образом, JDBC позволяет проделать весь цикл работы с базой данных. Подробно со всеми возможностями JDBC можно познакомиться, прочитав спецификацию JDBC, имеющуюся в документации Java 2 SDK, в каталоге docs\guide\jdbc\spec\. Дополнения спецификации версии JDBC 2.0 изложены в каталоге docs\guide\jdbc\spec2\. В каталоге docs\guide\jdbc\getstart\ есть пособие по использованию JDBC.