Сетевые средства Java
d8671b56

П.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.


Содержание раздела