DB2探検隊(2000/10/14)

 前回DB2探検隊(2000/10/12) BLOBの画像を表示ではBLOBのデータを取得したので、今回はCLOBに格納されたテキストを表示してみました。

 サンプルのEMP_RESUMEテーブルにはCLOB型の列にテキストが入っているので、これを読み出して表示します。テキストの形式としては、ASCIIだけを対象とします。BLOBと同様にCLOBにもgetClob()メソッドがあるのですが、その前にまずgetString()メソッドを試してみました。バイナリと違ってテキストは奥深いので、詳しくはまた(そのうち ^^;)改めて行いたいと思っています。今回は画面あたり1レコードを表示するようにして、「次データ」ボタンを押すと読み出すレコードを先に進めるようにしています。「検索開始」ボタンでは検索を行うだけで結果を画面表示しません。画面表示を行うには、「次データ」を押す必要があります。また、終了時には「検索終了」を押します。

 実行結果はこんな感じ。

 ソースコードはこんな感じ。getString()で値を取ってJTextAreaに表示するだけの、何の変哲もないプログラムですが、以前からの違いとしては列番号ではなく列名を指定して値を取っています。見て分かるとおり、実装はとってもいい加減です。

 DB2のJDBC2.0ドライバは、LOBの列があるとTYPE_SCROLL_INSENSITIVEを指定できないのが残念です。

package untitled6;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;
import java.io.*;

public class Frame2 extends JFrame {
  JPanel contentPane;
  JButton jButton1 = new JButton();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea1 = new JTextArea();
  JButton jButton2 = new JButton();
  JButton jButton3 = new JButton();

  Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;
  JTextField jTextField1 = new JTextField();
  JLabel jLabel1 = new JLabel();

  //フレームの構築
  public Frame2() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  //コンポーネントの初期化
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(null);
    this.setSize(new Dimension(486, 387));
    this.setTitle("CLOBの表示");
    jButton1.setText("検索開始");
    jButton1.setBounds(new Rectangle(58, 14, 90, 27));
    jButton1.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });
    jScrollPane1.setBounds(new Rectangle(6, 81, 472, 298));
    jTextArea1.setEditable(false);
    jButton2.setText("次データ");
    jButton2.setBounds(new Rectangle(148, 14, 90, 27));
    jButton2.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jButton2_actionPerformed(e);
      }
    });
    jButton3.setText("検索終了");
    jButton3.setBounds(new Rectangle(238, 14, 90, 27));
    jButton3.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jButton3_actionPerformed(e);
      }
    });
    jButton1.setEnabled(true);
    jButton2.setEnabled(false);
    jButton3.setEnabled(false);
    jTextField1.setEditable(false);
    jTextField1.setBounds(new Rectangle(69, 53, 169, 21));
    jLabel1.setText("EMPNO");
    jLabel1.setBounds(new Rectangle(17, 54, 55, 17));
    contentPane.add(jButton1, null);
    contentPane.add(jButton2, null);
    contentPane.add(jButton3, null);
    contentPane.add(jScrollPane1, null);
    contentPane.add(jLabel1, null);
    contentPane.add(jTextField1, null);
    jScrollPane1.getViewport().add(jTextArea1, null);
  }

  //ウィンドウが閉じられたときに終了するようにオーバーライド
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
    String url = "jdbc:db2:sample";

    try {
      Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
      con = DriverManager.getConnection(url);
      stmt = con.createStatement();
      rs = stmt.executeQuery("SELECT * FROM EMP_RESUME");
      jTextField1.setText("");
      jTextArea1.setText("");

      jButton1.setEnabled(false);
      jButton2.setEnabled(true);
      jButton3.setEnabled(true);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  void jButton2_actionPerformed(ActionEvent e) {
    try {
      while (rs.next()) {
        if (rs.getString("RESUME_FORMAT").equals("ascii")) {
          jTextField1.setText(rs.getString("EMPNO"));
          jTextArea1.setText(rs.getString("RESUME"));
          break;
        }
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  void jButton3_actionPerformed(ActionEvent e) {
    try {
      rs.close();
      stmt.close();
      con.close();

      jButton1.setEnabled(true);
      jButton2.setEnabled(false);
      jButton3.setEnabled(false);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}

[DB2探検隊の目次] [ホーム]