������ � ����� ������ �� Java-�������� � �������� �����������
��������
����������, ��� ������������ ������ � ����� ������ �� ������������ ����� ���������������� � ���� ����� �� ������������ ������� ���������. ����� ����, � ���� ����� ���������������� ����� ����� ����������� �������������� �� ���� � ������������ ���������� � ��� ������� ������� � ����� ������, �������� � ������� �����������. � ���� ������ Java �� ������������ ����������. ��� � ������ JDK1.1 �������� ����� ������� java.sql, �������������� ����������� �������, ��������� � ���� ������� ������������� ODBC-����������. � ���� ������ ���������� ��� ������������� �������, ��������: java.sql.CallableStatement, ������� ������������ ���������� �� Java �������� ��������; java.sql.DatabaseMetaData, ������� ��������� ���� ������ �� ������� �� ����������� ������� � ����������� � ���������� ����� ������������� ������ � ����� � ���������� ������, �������, ��������, ������ � �.�.; �������, - java.sql.ResultSetMetaData, � ������� �������� ����� �������� � ������� ���� ��� ����������� ���������� �� ������ ���� ������ ��� �������� ���� ���������� � ���� �������� ������ � �������.������, �������� ������� Java �� ������ ������������ ������ ���������������� ����������� � ���, ��� ���� � �� �� ������� ������� � ����� ������, � ������� ��������������� � �������������������� Java, ����� ������������ ����������� �����, ��������� ��� ������������ ����������� ��������-��������������� ����������, WWW � Intranet/Internet. ���������� �� ������� ��� �������� ������������� Java-�������� ��� �������������� � ������ ������.
1. Java-��������� � ������� � ����������� JDBC-ODBC
JDBC (Java Database Connectivity) �������� �� ����������, � ����������� � ������� �� ������������� SAG CLI (SQL Access Group Call Level Interface - ��������� ������ ������ ������ ������� SQL).
��� �� ���� JDBC �������� �� ����� � ���������� �������� ���������� � ������ ODBC. ���� � ��������� JDBC API � ������������� ����������� ������ �� ������ ����� ODBC, � � ����� ������������� ������ ������ � ����� ������ �� ����- ��� ����-������� ����� (��. ���.1), ��� ����� ���������� ������� ����, ��� ����������� ������������ JDBC-ODBC-Bridge ���������� ����������� ����� � ����� ����� �������������� ����������� (��. ���. 2)

���. 1. ���������������� ������ � ���� ������ �� 3-�-������� �����.

���. 2. ����� �������������� �����������.
���� ������� ������� �� ���. 2 ������ ����������, ����� ������ - ����� ����� �������������� ����������� � Java ������������ ������� ���������� ����� ���� �������� ����� ODBC � �� ���������� ������������ �������-��������� � ��������� ���� � ������� �������������� ����������������� ����������. JDBC Driver Manager - ��� �������� ����� JDBC-�����������. ��� ��������� ������� ����� ������ - ��������� Java-��������� � ��������������� JDBC ������� � ����� ����� �� ����. �����������, ��� ODBC ��� ���� � �������� ������ JDBC ��-�� ��� ������������ ����� ����������� ����������� ������������ ����������� � �������������. �� ����� ��������� �������� ������ - � ����� ������ ����� JDBC � �� ����� �� ���� ������������ ������������ ������ � ODBC-��������� ��������������� �� Java? ������� �� ���� ������ ����� ���� ������ ����������� ���. ���� ����� JDBC-ODBC-Bridge, ��� �� �������, ����� ��������� ������� ������.
1. ODBC ������ ������������ ��������������� �� Java, ��������� �� ������� �� C-����������. ����� �� Java C-���� �������� ��������� ��������� Java, ��������� ����� � ������ � ������ ��������� ������-�����������.
2. ������� ODBC C-API � Java-API �����������. � �������, Java �� ����� ����������, � �� ����� ��� � ODBC ��� ������������.
3. ODBC ������� ������ ��� ���������. � ��� ������� ������� � ������� ����, ������ ������� ����� ������ ����������� ��� ����� ������� ��������.
4. Java-API ���������, ����� �������� ��������� ������ Java �������. ����� ODBC ������������, �� ODBC-������� � ODBC �������� ������ ���� �������������� �� ������ ���������� ������. � �� �� �����, JDBC ������� ������� ��������� �� Java � ����� ���� ����� ��������� �� ����� ��������� �� ������� ����������� �� �����������.
JDBC API - ��� ������������ Java-��������� � ������� SQL ����������� �, ��������� ��� � �������� ���������� ��������� ODBC, �� ����������, ���-����, ��� ��������� Java-���������, ������������� � ���������� ������� ������� Java.
� ������� �� ���������� ODBC, JDBC ����������� ������� �����. ������� ��� ������ �������� �������, ������������ ������ JavaSoft ��� ������� �� JDBC � ���������� ������. ���� ������� �������� ����� ������� � �������� ������� JDBC � ���������� DriverManager. ��������, �������������� �������� Internet, ���� ������ � �������� �� ������������ �������������� ��� ������ URL.
jdbc:��� ���
� ��������� ������� ������ ODBC ����� ���� ������������ ��� ������� �������� ������� � ���� ������, ��������:
jdbc:dcenaming:accounts-payable,���
jdbc:dbnet://ultra1:1789/state
� ��������� ������ ����� URL //ultra1:1789/state ������������ �����
������, ��� ��� ���������� ����, ���� �����, ���-���� ������������ �������� ODBC ��������� ��� ��������������� � �����������. ��������� �������������� ����� ��������� JDBC � ODBC ����������� ������ JavaSoft � �������������� � InterSolv � ���������� JDBC-ODBC-Bridge. ��� ����������� � ���� JdbcOdbc.class (��� ��������� Windows JdbcOdbc.dll) � ������ � �������� JDK1.1. ������ JdbcOdbc-��������� ������ ������������ ����������� �������� (����������), ������� ��������� ���������������� ������ � ����� ������ ����� ����������� ��������� ODBC. ��� ������� ��� ���������� ����������� � ����� ODBC.INI. �� ���������� ������ JDBC-ODBC-Bridge ���������� ������ Java � ������ ODBC � ��� ����� ��������� ������������ ����� ������������ �������� ODBC, ������� � ���������� ������� ��������� � ��������.
���������� �������� ���������� �� Java c �������� � ��������� ������������ ������� ��� ���� � ������� dBase-�������.
// ��������� ��� �� Java ������������ ��� ������. ������� ������������
// ��������������� �������� url, login, � password, �, ����� ������������
// SQL ���������� �� ������ �������� �� � ���� ������.
//--------------------------------------
//
// Module: SimpleSelect.java
//
// ��������: ��� ��������� ��� ODBC API ����������. Java-����������
// ����� �������������� � JDBC ��������, �������� select ��������
// � ���������� ���������� � �������
//
// �������: JDBC � ODBC ����
//
// �����: Karl Moss (�.������ ����������� ��� ������ � ����������)
//
// ����: ������ 1997
//
// Copyright: 1990-1996 INTERSOLV, Inc.
// This software contains confidential and proprietary
// information of INTERSOLV, Inc.
//--------------------------------------
import java.net.URL;
import java.sql.*;
import java.io.*;
class SimpleSelect {
public static void main (String args[]) {
String url = "jdbc:odbc:dBase";
String query = "SELECT * FROM my_table";
try {
// �������� jdbc-odbc-bridge ��������
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
DriverManager.setLogStream(System.out);
// ������� ���������� � ���������. ������ ��
// ������������������ ��������� ����� �����������, ����
// �� ����� ������ ���, ������� ������ ���������� ���� URL
Connection con = DriverManager.getConnection(url, "", "");
// ���� �� ������ �����������, �� ���������� exception
// (�������������� ��������). ������, ���� �� ��������
// � ��������� ������ ���������, ������ �� ������� ����������� � URL
// �������� � ������ ��������� �� �������� ����������
//
checkForWarning (con.getWarnings ());
// �������� DatabaseMetaData ������ � ��������
// ���������� � ����������
DatabaseMetaData dma = con.getMetaData ();
//System.out.println("\nConnected to " + dma.getURL());
//System.out.println("Driver " +
//dma.getDriverName());
//System.out.println("Version " +
//dma.getDriverVersion());
//System.out.println("");
// ������� ��������-������ ��� �������
// SQL ���������� � �������
Statement stmt = con.createStatement ();
// ���������� ������, ����� �������� ResultSet �������
ResultSet rs = stmt.executeQuery (query);
// �������� ��� ������� � ���� �� ������ �����������
dispResultSet (rs);
// ������� �������������� �����
rs.close();
// ������� ��������
stmt.close();
// ������� ����������
con.close();
}
catch (SQLException ex) {
// ��������� SQLException. ���������� �
// ������� ���������� �� ������. �������, ��� ���
// ����� ���� ��������� ������, ��������� ������
//
//System.out.println ("\n*** SQLException caught ***\n");
while (ex != null) {
//System.out.println ("SQLState: " +
// ex.getSQLState ());
//System.out.println ("Message: " + ex.getMessage ());
//System.out.println ("Vendor: " +
//ex.getErrorCode ());
ex = ex.getNextException ();
//System.out.println ("");
}
}
catch (java.lang.Exception ex) {
// ������� ��������� ������ ���� exception, ����������� ��.
ex.printStackTrace ();
}
}
//----------------------------------
// checkForWarning
// �������� � ���������� ��������������. ������� true ����
// �������������� ����������
//----------------------------------
private static boolean checkForWarning (SQLWarning warn)
throws SQLException {
boolean rc = false;
// ���� SQLWarning ������ ��� �������, ��������
// ��������������� ���������.
if (warn != null) {
System.out.println ("\n *** Warning ***\n");
rc = true;
while (warn != null) {
//System.out.println ("SQLState: " +
//warn.getSQLState ());
//System.out.println ("Message: " +
//warn.getMessage ());
//System.out.println ("Vendor: " +
//warn.getErrorCode ());
//System.out.println ("");
warn = warn.getNextWarning ();
}
}
return rc;
}
//----------------------------------
// dispResultSet
// �������� ������� ���������� �����������
//----------------------------------
private static void dispResultSet (ResultSet rs)
throws SQLException, IOException
{
// ���������� ����������� ���������� �
// ��������� ��� �������� ������� ������������� ������
int i, length, j;
String cp1 = new String("Cp1251");
// �������� the ResultSetMetaData. ��� ����� ������������
// ��� ������ ����������
ResultSetMetaData rsmd = rs.getMetaData ();
// �������� ����� ������� � �������������� ������
int numCols = rsmd.getColumnCount ();
// �������� ��������� �������
for (i=1; i<=numCols; i++) {
if (i > 1) System.out.print(",");
//System.out.print(rsmd.getColumnLabel(i));
}
System.out.println("");
// �������� ������, �������� �� �� ��� ���, ���� �� �����������
// �������������� �����
boolean more = rs.next ();
while (more) {
// ���� �� ��������
for (i=1; i<=numCols; i++) {
// ��������� ������ ���������� ��������� ������� �������������
// ����� �� ������� ���� ������ � �������� ������, ������ ��� �
// ��������� ����� ������� ����� ���� ������������ ������������
// �������. ���� ������������ ����������� ����� - getString - �� ������
// ���������� �����������. ������ ����� ������� ��������� � Unicode,
// ����� �������������� � ������ Windows � ������ ���������� ����
InputStream str1 = rs.getUnicodeStream(i);
byte str2[];
byte str3[];
int sizeCol = rsmd.getColumnDisplaySize(i);
str2 = new byte[sizeCol+sizeCol];
str3 = new byte[sizeCol+sizeCol];
length = str1.read(str2);
// ����� ����� ������ ���� �� ������, ������� ���������� ������
// ���������������� ������
k=1;
for (j=1; j<sizeCol*2; j++) {
if (str2[j] != 0) {
str3[k]=str2[j]; k=k+1; } }
String str = new String(str3,cp1);
System.out.print(str);
}
System.out.println("");
// �������� ���������� ���� � ������
more = rs.next ();
}
}
}
� ���� ������� ���������, ���������� �� ��������� ����������, ���� ����������� ���� ��������� ���������, ����������� ������������ �� ��� ������ � ���������� ������ ������, ���������� ������� � ������ � ������������� ���������. ���� � ���, ��� ���� Java ������������� ���������� �������������� �� Unicode � ������� � ������������ � �������������� �� ����� ������ ��������� �������������� (��� ���������� locale), ��� �������������� �� ������ ��������� �� ��������� � ������������� ������, ��������, ����� ������������� ������ ��������� �� ��������������� � Java-���������, � ���������� �� ������� ����������, �������� �� ��� ������ ����� ��������� ������������� �����. �� �� ��������, ��� �� ������ �����, ��������� � ��� ������������� ���������, ���������� � ������ ������������ � Web-���������.
2. ����-��������������� Java-����������
2.1 RMI-����������
����� ��������� ������� (RMI - Remote Method Invocation) ������������ �������� ������������ ����� Java �����������, ���� ���� ��� ����������� �� ������ �����������, ����������� � ��������������� ������ ������� ����.
������ ����������� RMI ����������� � ���, ��� �� ������������ ��������������� ��������� ��� ������ � ������ � ������� �� ������� TCP. ������� ������������ ��� � ���, ��� �� ���������� ��� ��������� ����� �������� �������, ���������� �� ������� �������, ���, ��� ���� �� ��������� ������ ������������� ��������. RMI ����� ������ � ����� �����������, ��� ���������, ���������� �� �������, �� �� ������� ���������� Java-�������� �� ����� ������ ����������. ������� ����������, ��� �� ������, ����������� �������������� ��� ���� �� TCP/IP ���������.
���������� �������� ���� ��� ���������� ����������� RMI-����������:
- ���������� ��������� �������� � ����� ��� ������� � �������
- Java-����������
- RMI-����������
- ����������� .class-������ � ��������������� ����������
- �����������
- ����� �������
- ����� �������
��������� ���� ������ ���������� ��� ������� � �������, ������������� �� ����� � ��� �� ������, ������, ���������� ����� �������� ����� � ������� ��������� ��� ��������, ������������� �� ������ ������� � ���� � ��������� ������������. ��������� ������� ���� ����� � ������ ��������� � ����������� ����, ��������� ����������� �� �������.
��� �������� RMI
�� ����������� Java-���������, ����� ������� ������ ������, ������� ����� ������������ ���������, � ���������e�� ����� ������, ������� ����� ���� ������� ��� �������. ������ ����� ������������ RMI-��������� � ������� ������� ��� ������, ����������� ������� ������������������ � ��������� ��� ������ �� URL-���������� �����, ��������:
rmi://localhost/LookupServer������, ��������� ��� ������, ����� �������� �������� ������ � ������ ������, � �������� ��������� ������ � ����. ����� ��������� ����� ����� ��������� � ������� RMI ����������� � ������������ �� ����������������� ���� � ���������������� ����� �������, ������� ���������� ������������ � ������� TCP/IP.
���������� ���������� ���������� ����
RMI ������������ ������� Java, �������������� ����� ����� �� ������, ���������� �� ����, ��� ��� ������� ���������. ������ ��� ��� �������� ������, � �������� ����� ���������� ������������, - ��� ����������� ����������, ������������ ������, ������� �������� ������������-������������.
// Lookup.java
import java.rmi.*;
public interface Lookup extends Remote {
public String findInfo(String info) throws RemoteException;
}
Java.rmi.Remote - ������ ���������, ������� ���������, ��� ��� ��������� ������, - ��� ������� ������, ����������� �����("Lookup") �������� ���������� ��������. ��� ������ � ��������� ���������� ������ ���� ��������� ����� ���������� ���� Java.rmi.RemoteException, ������� �������������� ������ ���, ����� ����� ���������� ������ ���� ����.
���������� ���������� ����
����� ���� ��� �� ���������� ��������� � ���������� �������, ����� ��������� ��������� ��� - ����������� ��� �������. ������ ������������ ��������� ��������� � ������� ������� �������, ������� ����� ������������-���������.
��� ������ ������� ��� ����� ��������� ��������� �������:
// LookupServer.java
import java.io.*;
import java.util.*;
import java.rmi.*;
import java.rmi.server.*;
public class LookupServer extends UnicastRemoteObject
implements Lookup {
private Vector save = new Vector();
public LookupServer(String db) throws RemoteException
{
try {
FileReader fr = new FileReader(db);
BufferedReader br = new BufferedReader(fr);
String s = null;
while ((s = br.readLine()) != null)
save.addElement(s);
fr.close();
}
catch (Throwable e) {
System.err.println("exception");
System.exit(1);
}
}
public String findInfo(String info)
{
if (info == null)
return null;
info = info.toLowerCase();
int n = save.size();
for (int i = 0; i < n; i++) {
String dbs = (String)save.elementAt(i);
if (dbs.toLowerCase().indexOf(info) != -1)
return dbs;
}
return null;
}
public static void main(String args[])
{
try {
RMISecurityManager security =
new RMISecurityManager();
System.setSecurityManager(security);
String db = args[0];
LookupServer server = new LookupServer(db);
Naming.rebind("LookupServer", server);
System.err.println("LookupServer ready...");
}
catch (Throwable e) {
System.err.println("exception: " + e);
System.exit(1);
}
}
}
������ ������ � ��������� ���� ������ ��������� � ����� � ��������� �� ���������. ����� findInfo ���� ����� ������ ��� � �������.
������ ���� ������:
Ivanov, Ivan 295-0083
Petrov, Peter 775-9958
Romanov, Alexander 555-7779
�������, ��� LookupServer �������� ����������� ������������ ������ java.rmi.server.UnicastRemoteObject � ��������� Lookup. ���� �� ���� ������� ������������ ��������� �������� ���������, ����������� ��� ��������� ��������, � ������ ���������� ������, ������� ����� ������� ������������.
��������� ������ ������������
�������� ������� ����� ����� ���� - ��, ��� ���������� � ��������� main(). ������ ����� ����� ���������� ������. RMI ��������� ��������� ��������� .class ����� � � ���� ������ ���������� �����-������ web-������� � ��� ���������� �� �������� ��������, ��� ���� �� ���� ������ �����������. ���� �� �� ���������� ������, �� �� ��������� ������ ����������� ������ ��������� �����, � RMI �� ����������� �� ����� �������� � ������ �������������. ��� ��� �� ������ ���������� security manager, ����� ������� ��������� �������� ��������� .class ������.
������� LookupServer ����� �������������� � ������� ������ Naming.rebind � ���������� ��������� ������� �� �����.
�� ����� �� �������� ��������, ��� ��������� ����� ���������� ���������� ����������, ���� ������ �� �������� �������� �������� ���� � ������� TCP/IP ����������? ��� ���������� �� ������, ��������� ������ � ������ ���������� ��� ���������� ��������� � ����� ��� ������������ ����� �����. ��������������� .class ����� ������������ �� ���������� .class ����� ����� RMI ����������, ��������� ����.
�������������, ����� stub(��������) �������� ���:
public class LookupServer_Stub extends java.rmi.server.RemoteStub
implements Lookup, java.rmi.Remote { ... }
� �������� - ���:
public class LookupServer_Skel implements
java.rmi.server.Skeleton { ... }
������������� �������:
Javap -c LookupServer_Stub
����� ���������� ����-��� � �������������� ��, ��� ���������� �� ������.
����(stub) -��� �������� ��� ���������� �������, � �������� - ����� �������� �� �������, ������� ������������ ��������� ������.
���� ������������ ������� ������ �������� �� ������� �������, � �������� - �� ������� �������. ��� ���� ������������ �������������� �������� � ���������������� �����, � ����� ������, � ����� ������, ������������ � ������� ��������� TCP/IP
���������� ����������� ����
// LookupClient.java
import java.rmi.*;
import java.rmi.server.*;
public class LookupClient {
public static void main(String args[])
{
try {
RMISecurityManager security =
new RMISecurityManager();
System.setSecurityManager(security);
String host = "localhost";
String server = "LookupServer";
String name = "rmi://" + host + "/" + server;
Lookup look_obj = (Lookup)Naming.lookup(name);
String results = look_obj.findInfo(args[0]);
if (results == null)
System.err.println("** not found **");
else
System.out.println(results);
}
catch (Throwable e) {
System.err.println("exception: " + e);
System.exit(1);
}
}
}
���� �� ������������� ������, �������� ������ ���������� ������, �� ������ ��� ������������ ������������ ����� �� ��� � �� �������. URL ��� ���� ������������ ���:
Rmi://localhost/LookupServer��� localhost - ��� ���������� ���������� (IP, ����� = 127.0.0.1), ������������� ��� ������. ������ ������������� �� ��� �� ����� ������. �� ������ ����� ������������ � ��������� ������� ���. ����� ����� � ������� ������ ������, ���������� ��������������� ���������� �������.
���������� ����
��� ����� - Lookup.java, LookupServer.java, � LookupClient.java ������������� ��� � ������ � Java:
javac Lookup.java javac LookupServer.java javac LookupClient.java
���������� RMI �����������
����� ����, ��� �� �������������� ��� �����, ��������� RMI Compiler (rmic):
rmic LookupServer
����� �������� LookupServer_Skel.class � LookupServer_Stub.class �����.
�����������.class ������ � ��������������� �� ����� �� �����
�� ������ ����������� ���������� ����� (Lookup.class, LookupClient.class, � LookupServer_Stub.class) � ����������, ������ �� �� ������� ��������� ��� ������.
�� ������ ����������� ��������� ����� (Lookup.class, LookupServer.class, LookupServer_Skel.class, � LookupServer_Stub.class) � ����������, ��� ��� ������ ���������� ��� ���������� �������.
�����������
������, � �������� ���������� ������������, ������ ���� ������ � ������� ��������, �.�. ���������������. � JDK 1.1 ������� ����������� ���������
Rmiregistry
Rmiregistry ����� ����������� ��� � ��������� ���� ��� ��� ������� ������� �� �������.
����� �������
�� ������ ���������� ������ �� �������:
java LookupServer database_name
� �������, ���� ���� ���� ������ � ������� ���� � ��������� ��������� � ����� C:\PHONE.TXT, �� �� ������ ���� �������:
java LookupServer C:\PHONE.TXT
����� �������
���������� ��������� ���������� �� �������:
java LookupClient Ivanov
"Ivanov" - ��� ������� ��� � ����.
����� �������, RMI ���� ����������� ��������� �������������� Java-to-Java ���������� ���������, � ������� ������ ��������� �������� Java ���������� �� ������ Java-�������� �� ��������� ������� ��� ��� ���, ���� �� ��� ������ ���������� ��������. �����������, ��� �������� ����������� ����� ���������� ������������ ��� ������ � SQL-���������, ������� ������������� Java-API ��������� ��� ������� � ������. ��������, � ������ ��������� Informix � Informix Client SDK ���� �������� Informix Object Interface for Java, ��� ���������� �������������� �������, ��� ������������ ����������������� RMI-���������� � �������� � ����� ������ Informix. ����� ����, ������� � ��������������� RMI-������, ������� �������� ����� ������� � �������� �������, ������� ����� �������� ������������. � ��������, ����������� ���� ������ ����� ������������ ��� ������ � ������ ������ ������ � SQL-���������, ���� �� ������ ����� ������� ������� Java-API ��������� ��� ������� � ����� ������. � ������� ������ �� ������������ � ������������� JDBC � RMI-�����������, ���� ���� �� ��� ����� � ����������� ������� ����������. � Informix, ��������, ��� ����������������� �������������� � ������ ������ ���������� ��� RMI-������: informix.api.remote.rmi - ��� ��������� �������� � informix.api.remote.rmi.server - ��� rmi-�������. ��� ���� � ���������� ���������� ������������ ��������� � DBMSManager, ������� ����������� ���������� ��� ���� �������� Informix � ����� ������, � �� ������ ���������� ���� ���������, ���� ��������� ���������� � ����� ����� RMI ������. ��� ���������� ���������� ��������� DirectDBMSManager ������. ��� ���������� ���������� ��������� RMIDBMS-Manager ������ � ���������� � ���������������� RMI �������. ������������ RMI ������� �������������� � �����:
rmi://hostname[:port]/
//�������� DBMSManager �������
DBMSManager getDBMSManager() throws Exception
{
// based on RMI Checkbox, get appropriate DBMSManager
DBMSManager dbmsManager;
if (RMIcheckbox.getState())
dbmsManager = new RMIDBMSManager(rmiServerTextField.getText());
else
dbmsManager = new DirectDBMSManager();
return dbmsManager;
���� �������������� � ����� �������������� � ������� ����������� �������������� ������� � ������� ���������� ��������, ������� ����� ���������� ��� ��������, ��� � ������������. � ��������� ����� � SQL-�������� ��� ����� �������������� �� �������, �� ���� ������ ������������������ - ������ � ������������� Java-API ��������� ������ ������������ ����.
2.1 Java, ����������������� � ����
Java ����� ���� �������� � ���� ���������� ��������� �������� � ��� ���� ������ ����������� ������� ����� ���������� �����:
- ���������� ������������ ����� ���������������� ��� ��������� �������� ��������. � ������ ������������ ����������� ������ Java � ���������� ��������� JDBC. ����������� ������� � ����������� ����� ���������������� ��������� ������ ����������� �������� �������� �� ����� SQL.
- ���������� ��������� ����� ������. �������, ���������� �� ����� Java ����� ��������� � ���� �������� � ����������� �������. ��� ��������� ��������� � ������������ ������������ ���� ������. Java-����� ����� ���� ����������� � �������� ���� ������ ��� ������� �������. ������ ���� ����� ������ ���������� ����������� ���������������� Java-������. � �������� ������� ������� ������� ����� �� ����� Java, �������� ������. ���������� ��� ����� ���� ������� � ������ ������. ��������, ��������� ������ ����� ����������� ������ � ����� Street � Postal Code(�������� ���), � �������� ���� City ����� ����������� �� ������ ��������� �������. ����� ����, ����� ������������ ������������ ������� � �������. ��� ���� ����������� ���������� ������� � ����������� �� ������������� ������. ��� ����� ������� ������ US_Address � Rus_Address, �������������� �� �������� ������ Address. � ������ ����� ������ ����� ���� ������ ������ ����������� ������� �� ��������� ������� � ������ �������� ��� ��������, ����������� ������ ��� ������ � ���. ���� ��� SQL ����� �������������� ��� ������� � Java-��������, ��� ��� ��� ������� � Sybase Adaptive Server.
��������� ������ ��������� ����� ������ � �������:
INSERT INTO employees (id, name, Address)
VALUES(1789, "Serg Dunaev", new Rus_Address("58 Gagarin Street", "153038")
)
��������� ������ � �������������� Java-�������� ���������� ������ �����������, ������� �� ��������� �����:
SELECT name FROM employees WHERE Rus_Address.street="Gagarin Street"
- ������ ����������� ������. ������� ���������� ����������� ���������� ����� ����� ���������� ����� ����������� �����������, ��������� ���������� � ����. ������������ ������ ������������ ������ ����������� ������ �� ���� ������� �������������� �������. ������������ ��������� �� Java ������� �� ������ �������. ��� �� ������������� ���������� �������� ����������� Java-������� � ����. ������ ������ ���� ��������������� � ����-��� � ��� �����, ������ ��� ������������� � ����� ����������� ������. � ����� � �������������� ����������� ������ ��� ���������� ������� �� Java � ���������� ��������� ���������� JDBC, ���� � ��� �� ������ �� ����� Java ����� ���� ����������� ��� ������, ��� � ��� ����.
3. Java-��������
���� ������� ��������� ���������������� Web-���������, �� �������� ��������� ���������������� Web-�������� � �������� ������ ��������� ����������������. � ��������� ����� ������ ������������ ������������ ��������, ����������� �������� ��� ��������, ������ ��������, ������� �� ����� ������ ��������� �, ������� ������ ����������� � ��������� Web-�������, �����������, � ������� �� ������� CGI-��������� ��� ��������, ���� ����� �������� �����������.
3.1 �������� �� ���� Java Web Server
�������� �������� ���������, ������� �������� ������������� ���������, � ������� �������� �� ����� �������� ���������� � Java-��������������� Web-�������. � ������� �� ��������, ��� �������� ������������ Java-��������� (��� ������� � GUI-�����������), �� ����, ������ ������������������� � ����������� ������������ �, ��������� ��� ����������� Java, ��� ����� ������������ ����������� ����� HTML � ����������������� � ����� ���������. �����������, ��� �������� ����� ������������ � ���������� ��� ������� � ����� ������, ������������ ��� ��������� �������� � ����� �� ��������. � ��������� ����� ����������� Web �������� ������������ ���������� ���������. Java Web-Server ����� ���, ��� ��� �� �������� ����� ��������� ��� ����������. ����������� Servlet-API ���������� ��� � ����� Java Web Server, ��� � � ��������� �������� JSDK, �� ������� � ������ 1.2, �� ������� � ������ JDK. ����������� ������������ ��������� �������� ��, ��� ��� �� ������� �������� ����� ��������� ��� ������ ����� �������. ��������� ��������� ����������� ����������� � ������ ������ �������� �� ������� � �� ����� ������������������ ����������� ��� CGI, ��� � Fast-CGI ���������� (��. ���.3).


���. 3. ��������� �������� �� Web-�������.
�������� �� ��, ��� �������� ���������� HTTP-��������, �� ��� ������������� ������������� ������� ��� ������ ����� ������� � ��� ����� �������� �� ��������������. � ���������, ����� �� ����������� ��������, �����-����, ��������� �������� ������������� ������������� ��������. ���� � ���, ��� ����������� ���� ����������� ������ ��� �� ���������, ������ ��� Web-������ ��� ������ ��������� ��� ���������� Java-handler, �������� �������� �� ���������� ��� Java-�������� � ������������ ������-������� ������ � ��� ����� ����������� ���������� �������. �������, ���� �� ������ �������� � �������� �� ������ Web-�������, ������� ��������� ��������, ������������� ������, ��� ���� ������������ ������ ����������� ���������� �����/������ ��������� ����������� ������ ��� ������ �� ��������, ��������:
// ����������� ������������ ������������
// � ����������� �� ������������� ���� ���������
String dos = new String("Cp866");
String win = new String("Cp1251");
String iso = new String("8859_5");
String im = new String("������������� �����");
.......................................................
out.println("<body>");
//out.write(im.getBytes(dos));
out.write(im1.getBytes(win));
//out.write(im2.getBytes(iso));
out.println("</body></html>");
�� � ������ ����������� ������� Java - getBytes() �� ���������, ����� �� ���������� ������ ��� ������ ��������� �� ��� ������. ����� ���������� ��������� �����, ������� �� ��� ������������ ��� ������ � ������ ������ ��� ������ ���������� JDBC. ����� ����, ���� font.properties � �������� $JDK_HOME/lib ��� � ����������� �������� ������ �������� ������ ���� �������������� ������� ��������. �� ������ ������� Java ������� ������� ����� font.properties.ru, ������� ����� ����� � �������� ������. ���� �� ��������� � ��� ���������������� Web-��������, ��������, ������� ������� Apache, �� �� ����������� �� ��� � ��� ������������ ������, ����������� �� ���� ������ �� ��������. ����� ������� ��������������� �������� � ����� ������ � �������? ������� �� ����������� ������� ����������� �� ������������� ����������� � ����� ������. ����� ������������ ������������ JDBC-ODBC, ��� ������������� �������� ��������������� �� ���������� SQL-������� � ���� ������. ���������� �������� DBServlet.java, ������� � ������� ����� ����������� ��� �� Java Web Server, ��� � Web ������� Apache.
/*
* @(#)DBServlet.java 1.6 97/06/13
*/
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;
import java.sql.*;
/**
* DBServlet
*
* ���� ������� ������������� ��� ������������ JDBC ����
* � �������� ������ � �����
������ ��� ������ ���������. ��� ����, ����� ��������� ����
* �������, ���������� CLASSPATH, LD_LIBRARY_PATH, ODBCINI
* ������ ���� ��������������� ������� �����������.
*/
public class DBServlet extends HttpServlet {
/**
* init method
*/
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
/**
* service method
*/
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
String stack, username,
password, query;
Connection con;
PrintStream out;
/* ServletOutputStream out = res.getOutputStream();*/
// �������� ����������. ������ ��� ��������� ������ ����� ���������
// � ���������� ������������� ���� ��������, � ������� �����
// ����������������� ��� �������
stack = req.getParameter("stack");
username = req.getParameter("username");
password = req.getParameter("password");
query = req.getParameter("query");
res.setContentType("text/html");
out = new PrintStream(res.getOutputStream());
printPageHeader(out);
// � ��� ������, ���� ��������� �����������
if (stack == null || username == null || password == null ||
query == null) {
printPageFooter(out);
return;
}
String url = "jdbc:odbc:"+stack;
out.println("<hr><h3>Previous Query</h3>");
out.println("<pre>");
out.println("Database Stack : "+stack);
out.println(" User ID : "+username);
out.println(" Password : "+password);
out.println(" Query : "+query);
out.println("</pre>");
try {
// ����� jdbc ����. ����� ������������ ���������
//������������������ ���������
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//Class.forName("jdbc.odbc.JdbcOdbcDriver");
// �������� ���������� � ����� ������
con = DriverManager.getConnection(url, username, password);
out.println("<hr>");
out.println("<h3>ODBC Driver and Database Messages</h3>");
checkForWarning(con.getWarnings(), out);
DatabaseMetaData dma = con.getMetaData();
out.println("Connected to " + dma.getURL() + "<br>");
out.println("Driver " + dma.getDriverName() + "<br>");
out.println("Version " + dma.getDriverVersion() + "<br>");
// ������� � ��������� ������. ���������� �������� SQL
// �������� ��������� ������������� � ���� ��� ��������
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
// ������ �����������.
//��� ��������������� �� ����������� �����
// � ��������� � ������� �������
dispResultSet(rs, out);
rs.close();
stmt.close();
con.close();
out.println("<hr>");
}
catch (SQLException ex) {
out.println("<hr>*** SQLException caught ***");
while (ex != null) {
out.println("SQLState: " + ex.getSQLState() + "<br>");
out.println("Message: " + ex.getMessage() + "<br>");
out.println("Vendor: " + ex.getErrorCode() + "<br>");
ex = ex.getNextException();
}
}
catch (java.lang.Exception ex) {
ex.printStackTrace();
}
printPageFooter(out);
}
/**
* ������� ����������� ����������
*/
public String getServletInfo() {
return "��� ������� �������,
������� ���������� ���
������������ JDBC";
}
/*
* �������� � ������ ���������� �������
*/
private void checkForWarning(SQLWarning warn, PrintStream out)
throws SQLException
{
boolean rc = false;
if (warn != null) {
out.println("<hr>*** Warning ***");
rc = true;
while (warn != null) {
out.println("SQLState: " + warn.getSQLState() + "<br>");
out.println("Message: " + warn.getMessage() + "<br>");
out.println("Vendor: " + warn.getErrorCode() + "<br>");
warn = warn.getNextWarning();
}
}
}
/*
* ����� ����������� ������� � ��������� html �������
*/
private void dispResultSet(ResultSet rs, PrintStream out)
throws SQLException, IOException
{
int i;
// ���������� ������������ ��� ��������� ���������� � �����
ResultSetMetaData rsmd = rs.getMetaData();
int numCols = rsmd.getColumnCount();
out.println("<hr>");
out.println("<h3>Database Columns and Data</h3>");
out.println("<table border=3>");
out.println("<tr>");
for (i=1; i<=numCols; i++) {
out.println("<th>" + rsmd.getColumnLabel(i) + "</th>");
}
out.println("</tr>");
// ��� ���� ������
while (rs.next()) {
out.println("<tr>");
// for one row
for (i=1; i<=numCols; i++) {
dispElement(rs, rsmd.getColumnType(i), out, i);
}
out.println("</tr>");
}
out.println("</table>");
}
// ������ ������ ��������
private void dispElement(ResultSet rs, int dataType,
PrintStream out, int col)
throws SQLException, IOException
{
String cp1 = new String("Cp1251");
// � ����������� �� ����
//������, ���������� ��������� ���� ���������
switch(dataType) {
case Types.DATE:
java.sql.Date date = rs.getDate(col);
out.println("<th>" + date.toString() + "</th>");
break;
case Types.TIME:
java.sql.Time time = rs.getTime(col);
out.println("<th>" + time.toString() + "</th>");
break;
case Types.TIMESTAMP:
java.sql.Timestamp timestamp = rs.getTimestamp(col);
out.println("<th>" +
timestamp.toString() + "</th>");
break;
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
String str = rs.getString(col);
// ��������, ��� ����� ���
//����������� ������������� ��������������
out.println("<th>" + str + "</th>");
break;
case Types.NUMERIC:
case Types.DECIMAL:
java.math.BigDecimal numeric = rs.getBigDecimal(col, 10);
out.println("<th>" + numeric.toString() + "</th>");
break;
case Types.BIT:
boolean bit = rs.getBoolean(col);
out.println("<th>" + new Boolean(bit) + "</th>");
break;
case Types.TINYINT:
byte tinyint = rs.getByte(col);
out.println("<th>" + new Integer(tinyint) + "</th>");
break;
case Types.SMALLINT:
short smallint = rs.getShort(col);
out.println("<th>" + new Integer(smallint) + "</th>");
break;
case Types.INTEGER:
int integer = rs.getInt(col);
out.println("<th>" + new Integer(integer) + "</th>");
break;
case Types.BIGINT:
long bigint = rs.getLong(col);
out.println("<th>" + new Long(bigint) + "</th>");
break;
case Types.REAL:
float real = rs.getFloat(col);
out.println("<th>" + new Float(real) + "</th>");
break;
case Types.FLOAT:
case Types.DOUBLE:
double longreal = rs.getDouble(col);
out.println("<th>" + new Double(longreal) + "</th>");
break;
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
byte[] binary = rs.getBytes(col);
out.println("<th>" + new String(binary, 0) + "</th>");
break;
}
}
private void printPageHeader(PrintStream out) {
out.println("<html>");
out.println("<head>");
out.println("<tltle>
�������� ������� ��� ������
� ������ ������
</title>");
out.println("</head>");
out.println("<body>");
out.println("<center><font size=5>" +
"<b>Jeeves Database Servlet</b>" +
"</font></center>");
out.println("<hr>");
out.println("<form action=\"/servlet/dbServlet\" method=\"get\">");
out.println("<pre>");
out.println("ODBC DSN : <input type=textarea name=stack>");
out.println(" User ID : <input type=textarea name=username>");
out.println(" Password : <input type=textarea name=password>");
out.println(" SQL Query :
<input type=textarea name=query>");
out.println("</pre>");
out.println("<input type=
submit>");
out.println("</form>");
}
private void printPageFooter(PrintStream out) {
out.println("</body>");
out.println("</html>");
out.flush();
}
}
� ���� ��������� ���������� ������ ������� ��� ��������� ��������� - javax.servlet.* � javax.servlet.http.*, ������� ��������� � ����������� �������� ����� JavaSoft JSDK1.0.1 ��� ��������������� � JDK1.2.
������� ����, ������� ���������� ��� ���� ������, - ��� ����� ������� ����������� ���������� �������� ��������� �� ����� � ����� ������� ���������� �������� ��������� �� ������.
public void service (HttpServletRequest req,
HttpServletResponse res) throws
ServletException,
IOException
{
...
}
����������� ����� request �������� ������ ����������, ������� ����� ���� ��������� ��� ������ HttpServletRequest::getParameterNames ������.
stack = req.getParameter("stack");
���������� ��� �������� ���� �� ������������� � htm-����� ��������� stack, � ������� �� ������ �������� � ���������� ��� ODBC-��������� (ODBC DSN).
����� ���������� ����������� ���� ��������� ��� ���������� ������� ���������, ����������� �� HTML-�����, ����� ��� ���������� ��� ��������� � ��������:
while ( values.hasMoreElements() )
{
...
}
��� � �������� ������� ������������ ��������� ����� �������� �� ����� ������ �����.
String name, value; name = (String)values.nextElement(); value = req.getParameter (name);
���� ������ ������ ���������� ��� ����, ����� ������ ������ ������� ��������, ����������� ���������������� JavaServer"� ��� ��������� ����, ������ ����, ����� ������ c������ CGI. �������, �������, ��� ���� ��������, ������� ����� ���������� ������� - ��������� ������� � �������������� ��������. ���������, ��� �� ��������������� ���� ������ � init ������ � ����� ��������� HttpServlet ��� ServletException:
public void init (ServletConfig conf) throws ServletException ... public void service (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException ...
������ DBServlet �������� ����� service ����� ������������ ���� ��� ��������� ������ try/catch, ������� ������������ ������������ ��� ������������ ��������� �������, ��������� � ���������� ��������� ���������� ��� ����������. � ������ ����� try ������������ ����� ���������� �������� ��� ������������� �������� ���������� � �������� ���� ������ ��� ���������� sql-�������. ������ ���� try ����� ������������ �� ������ ����������, ��������, ��� ������ ����������� � ���� � ����������� �������� - ������� �� ������� �� ������ ����� ������� �� ������������� ���������. ���� ��� - � ����������� ���������� ������ �������� ��������������� �����������.
��� ��������� ����� �������������� � ������������ � ������ ������� � �������� �� ������ ���������� ������ � �������, �� � ����� ���������� ������ � ����������� ������ java.sql ���������� ������� ������ �������, ��� ��, ������� ���������� ����������� �������� ��� ���������� ����������� ODBC-����������.
3.2 �������� �� ���� Apache
��� ���, ��� ����� ���� � ���������� ������������� ����������� � ��������� � �������������, ����� Apache HTTP-������� ��������, �������, ����� ����������. ����� �����, ����� ���������� ���� ������ ����� �������� � �� �� � �� ����������������� ���������������������� ��������, ������ ����������� � ���������� ������� ��������, ��� ������� �� ���������, ���� �������� � �������� �����������. �����, �� ������ �� �����, ���������� ������� ��������� � ����������� �������� Web-�������, ������������ �� �������� ������, � ��� ��������� ����� ���� ������������ ��������� �������������, ������� ��� ������������� ��������� �� �� ���� ����������. �� ��������� ������� ��� Web-������� ����� �������� �� ���������� ������ ��� ���� ���������: CGI, ISAPI ��� NSAPI, ������ ��� ��������� ���� ����� ���� ����������� �� Wintel-���������. ���, � ���������� Delphi-3 ������ ����� ���������� ���� ���������� � ���� Web-�������, �� �������� ������������� ��������� ��������������, ������� ����� ���������� ������ ������� Web, ���������� ��� Windows-95/NT, � ��� ����� � ���� �� ������� ������� ����������� ��������� ����� ������� Gateway-ODBC. ����� ������� �� ������ ���������� �����������, ��� �����, ��� �������� HTTP ��� ������ ����� ������� �������� ������������ ������ ���������� ��������� � ������ � ���� ������ ��� ��������. ��� Apache ���������� ����������� ����������� ��������� JServ, ������� ����� ��� � ��� ������ � �������� ����� ���������������� ���������� ���������. ��� ������� Apache ������������� �������� Java-����������, �������� � ����� ������������ �� ���������� ��� �������, ��������� � �������� Java-��������. ��������, ���� ����� �� Java �������������� ��������������� � Web, ������� ���������� ������� �������� ��� ������������ ��������. �������� ���������� Java-���������� ������� �� ������������������ ����������, �� ������� ��������������� Web-������ Apache. ���� ���, � ������� UltraSparc-3000 c Java-����������� ������� HotSpot, �� �������� ����� ���� ����� �������, � �������, � �� � � ����� ��� �������, ��� �� ������� NT-������. Apache, � ������� �� ��������� �� ����� ����������� ����������� ������ Java, � ������������� �� ��, ������� ������������� ��� ������ ���������. ����� ������ ����������� �����, ��� ��������� ��������� ��������� Java-�����, ���������� ���������� ������� � ������ �� �������� � ���������� Apache. �������, � � ����� ���������������� ������ Apache ��� ������������� ������� ����� �������� �����, ��� �������� ��������������, ������� ��� ���������� � ������������� ������� ������ �������� ��� ������� �� ��������� � ������ �������������������� ��������� ��� ����������������� Web-�����, ������ ��� Fastrack, ��� Java Web Server. ��� ����, ����� ������������ Apache �� �������������� � Java, ���������� �������������� ������� Jserv, ���������� ����������� ���������� Java-�������, ����� �������� ���������������� ���� Apache Configuration, ������� � ���� ������:
Module jserv_module mod_jserv.o
(������ mod_jserv.c ������ ���������� ��� ���� � src/���������� Apache). ����� ����� ���������� ��������������� Apache � ������� ��������� make. ����� ����� �������� �������� ���������������� ���� Apache httpd.conf, ������� � ���� ������ ����:
<IfModule mod_jserv.c> ServletProperties conf/servlet.properties ServletPort 8007 ServletBinary /opt1/jdk1.1.5/bin/java ServletClassPath /opt1/jdk1.1.5/lib/classes.zip ServletClassPath /opt1/local/etc/httpd/jserv/lib/servclasses.zip ServletClassPath /opt1/local/etc/httpd/jserv/classes ServletClassPath /opt1/JSDK1.0.1/lib/classes.zip ServletErrorLog logs/jserv_log ServletAlias /servlets /opt1/local/etc/httpd/ jserv/servlets ServletAuthExport Off # AddHandler jhtml-parser .jhtml # Action jhtml-parser /servlets/ org.apache.jserv.JServSSI </IfModule>
����������, � ������ ���������� ������ ���������� ����� ���� �������, ������, ����� ����� ������ Apache HTTP-������� �� ������� httpd, �� ������������� ��������� Java-����������, ������� � ����� ��������� � ��������� ��� ����������� ��������, � ��� ����� � ��, ������� ����� �������� � ������ ������. ������������ Apache ��� ������ � ������ ������ ����������� � ���, ��� ��������� ��, ����� ��� � Java, �������� � �������� �����, ����� ���������� ������������ ��� ����������� ����������� � ��������� ��� ���������� �������������� ��������� �� Java � �� ����� C, �������, �� ���������� ������������� ����� ��������� ��������� �������� �������.
����������
������������� ������ �� ���������� ����������� ������������� Java-�������� ��� ������ � ������ ������. ������� ������, ��� ���������� ��������� �����������, ���������������� � ����������� ������ �����������. ������ ������� Microsoft �������� � �������� ����� ���������� RDO, ADO � OLE DB. ��� ����������, ����� ��� JDBC �������� � ����������� ��������-��������������� ���������� � �������� �� �������, ������� ����� ���� ��������� � JDBC. � �� �� ����� � JDBC ����������� � � ������ ������� �������� ���� JSQL, ������� ��� ������������ ��������� ��������. � ���� ������, SQL ��������� ����� ����� ���������� � Java ���������, � �� ���������� �� ��� ��������� ���������� � Java-������. ���������� SQL-������������ �������� ������������� ������������ Java-���������� � SQL ����������.




����� � ��� �� �� ����� ���� ������ �������

