http://woman-storry.ru/moda-i-stil/kak-odet-muzhchinu/259-osobennosti-dizayna-muzhskih-rubashek.html
Java Sources

Пособие по Java

Краткий курс Java

Примеры аплетов

Ссылки на другие ресурсы, посвященные Java

Java и базы данных

 

   Большинство информации хранится не в файлах, а в базах данных. Приложение должно уметь связываться с базой данных для получения из нее ни формации или для помещения информации в базу данных. Дело здесь осложняется тем, что СУБД (системы управления базами данных) сильно отличаются друг от друга и совершенно по-разному управляют базами данных. Каждая СУБД предоставляет свой набор функций для доступа к базам данных, и приходится для каждой СУБД писать свое приложение. Но что делать при работе по сети, когда неизвестно, какая СУБД управляет базой на сервере?
   Выход был найден корпорацией Microsoft, создавшей набор интерфейсом ODBC (Open Database Connectivity) для связи с базами данных, оформленных как прототипы функций языка С. Эти прототипы одинаковы для любой СУБД, они просто описывают набор действий с таблицами базы данных. В приложение, обращающееся к базе данных, записываются вызовы функций ODBC. Для каждой системы управления базами данных разрабатывается так называемый драйвер ODBC, реализующий эти функции для конкретной СУБД. Драйвер просматривает приложение, находит обращения к базе данных, передает их СУБД, получает от нее результаты и подставляет их в приложение. Идея оказалась очень удачной, и использование ODBC для работы с базами данных стало общепринятым.
   SUN подхватила эту идею и разработала набор интерфейсов и классов названный JDBC, предназначенный для работы с базами данных. Эти интерфейсы и классы составили пакет java.sql, входящий в J2SDK Standard и его расширение javax.sql, входящее в J2SDK Enterprise Edition.
   Кроме классов с методами доступа к базам данных для каждой СУБД необходим драйвер JDBC - промежуточная программа, реализующая методы JDBC

Существуют четыре типа драйверов JDBC
  • Драйвер, реализующий методы JDBC вызовами функций ODBC. Это так называемый мост (bridge) JDBC-ODBC. Непосредственную связь с базой при этом осуществляет драйвер ODBC.
  • Драйвер, реализующий методы JDBC вызовами функций API самой СУБД.
  • Драйвер, реализующий методы JDBC вызовами функций сетевого протокола, независимого от СУБД. Этот протокол должен быть, затем, реализован средствами СУБД.
  • Драйвер, реализующий методы JDBC вызовами функций сетевого протокола СУБД.

Перед обращением к базе данных следует установить нужный драйвер, например, мост JDBC-ODBC:

try{
   Class dr = sun.jdbc.odbc.JdbcOdbcDnver.class;
}catch(ClassNotFoundException e) {
   System.err.println("JDBC-ODBC bridqe not found " + e)
}

   После того как драйвер установлен, надо связаться с базой данных. Методы связи описаны в интерфейсе connection. Экземпляр класса, реализующего этот интерфейс, можно получить одним из статических методов getConnection() класса DriverManager, например:

String url = "jdbc:odbc:mydb";
String login = "habib";
g password = "1nF4vb";
Connection con = DriverManager.getConnection(url, login, password);

   Обратите внимание на то, как формируется адрес базы данных url. Он начинается со строки "jdbc:", потом записывается подпротокол (subprotocol),
в данном примере используется мост JDBC-ODBC, поэтому записывается
"odbc:". Далее указывается адрес (subname) по правилам подпротокола,
здесь просто имя локальной базы "mydb". Второй и третий аргументы - это имя и пароль для соединения с базой данных.
   Если в вашей вычислительной системе установлен пакет javax.sql, то вместо класса DriverManager лучше использовать интерфейс DataSource.
   Связавшись с базой данных, можно посылать запросы. Запрос хранится в объекте, реализующем интерфейс Statement. Этот объект создается методом createStatement(), описанным в интерфейсе Connection.

Statement st = con.createStatement();

   Затем запрос (query) заносится в этот объект методом execute() и потом выполняется методом getResultSet(). В простых случаях это можно сделать одним методом executeQuery():

ResultSet rs = st.executeQuery("SELECT name, code FROM tbl1");

   Здесь из таблицы tbl1 извлекается содержимое двух столбцов name и code и заносится в объект rs класса, реализующего интерфейс ResultSet.
   SQL-операторы INSERT, UPDATE, DELETE, CREATE TABLE и другие в простых случаях выполняются методом executeUpdate().
   Остается методом next() перебрать элементы объекта rs - строки полученных столбцов - и извлечь данные многочисленными методами getXxx() интерфейса ResultSet:

while (rs.next()){
  emp[i] = rs.getString("name");
  num[i] = rs.getInt("code");
  i++;

}

   Методы интерфейса 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, тоже позволяющим изменять объект ResultSet методами setXxx().
   Интерфейс PreparedStatement, в свою очередь, расширен интерфейсом CallableStatement, в котором описаны методы выполнения хранимых процедур.
   Ниже приведен типичный пример запроса к базе Oracle через драйвер Oracle Thin. Апплет выводит в окно браузера четыре поля ввода для адреса базы, имени и пароля пользователя, и запроса. По умолчанию формируется запрос к стартовой базе 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 bl, b2;
  private String url = "jdbc:oracle:thin:01ocalhost: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(newFont("Serif", Font.PLAIN, 14));

    Label l1 = new Label("URL базы:", Label.RIGHT);
    l1.setBounds(20, 30, 70, 25);

    add(l1);

    Label l2 = new ЬаЬе1("Имя:", Label.RIGHT);
    l2.setBounds(20, 60, 70, 25);

    add(l2);
   

    Label l3 = new Labеl("Пароль:", Label.RIGHT);
    l3.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 Label("3anpoc:", Label.LEFT);

    14.setBounds(10, 120, 70, 25);
    add(l4);

    ta = new TextArea(query, 5, 50, TextArea.SCROLLBARS_NONE);
    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 = 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.next () ) {
        String s = " ";
        // Номера столбцов начинаются с 1!
        for (int i = 1; i <= n; i++)
          s += " " + rs.results.addElement(s);
        results.addElement(s);
      }
      rs.close();
      st.close();
      con.close ();
      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 y = 30, n = results.size();

   for (int i = 0; i < n; i++)
     g.drawString((String)results.elementAt(i), 5, y +- 20)

  }
}


   Таким образом, JDBC позволяет проделать весь цикл работы с базой данных. Подробно со всеми возможностями JDBC можно познакомиться, прочитаи спецификацию JDBC, имеющуюся в документации Java 2 SDK.

Design Studio CruxAstata © 2001. Максим Никитин karanak@hotbox.ru