П.1. Апплет, обращающийся к базе Oracle
Листинг П.1.
Апплет, обращающийся к базе Oracle
import j ava.awt.*;
import java.awt.event.*;
import j ava.applet.*;
import java.util.*;
import j ava.sql.*;
public class JdbcApplet extends Applet
implements ActionListener, Runnable{
private TextField tfl, tf2, tf3;
private TextArea ta;
private Button bl, 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 вида
. При этом учтите, что 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.