• 検索結果がありません。

SQLException

ドキュメント内 Javaアプリケーション開発ガイド入門編 (ページ 43-56)

第 9 章 例外処理

9.1 SQLException

Java のアプリケーションでは、例外という仕組みを用いてエラーを扱います。例外は Exception クラスで表されます。

JDBC を用いたデータベースの操作でエラーが発生した場合も、例外が発生します。データ ベースに関する例外は、Exception クラスを継承した SQLException クラスで表します。

JDBC のオブジェクトは、エラーを検出すると SQLException クラスの例外をスローします。

アプリケーションはこの例外をキャッチして、SQLEexception オブジェクトから SQLSTATE やエラーメッセージなどの情報を取り出すことができます。

SQLSTATE やエラーメッセージの意味については、マニュアル“アプリケーション開発ガイ ド(JDBC 編)”を参照してください。

(例)

try {

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

オブジェクトを作成する。

Statement stmt = con.createStatement();

// SELECT文を実行して、ResultSetオブジェクトを得る。

ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1");

// ResultSetから1行ずつデータを取り出す。

while (rs.next()) {

// IDとNAMEの値を取り出す。

int iID = rs.getInt(1);

String sName = rs.getString(2);

// 取り出した値を表示させる。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

// ResultSetオブジェクトを破棄する。

rs.close();

// Statementオブジェクトを破棄する。

stmt.close();

// INSERT文をコミットする。

con.commit();

// データベースから切断する。

con.close();

}

// データベースに関する例外をキャッチする。

catch (SQLException e) {

// 例外オブジェクトからエラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

System.out.println("SQLSTATE : " + e.getSQLState());

System.out.println("ERROR CODE : " + e.getErrorCode());

e.printStackTrace();

}

// データベース以外のエラーが発生した場合の例外をキャッチする。

catch (Exception e) {

// エラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

付録A サンプルプログラム

本書で説明した内容を使用するJavaのアプリケーションのサンプルを示します。

A.1 サンプルで扱う表

■表の構成

本章のサンプルプログラムでは、以下のデータベースにアクセスするとします。

データベース名 COMPANY スキーマ名 GENERAL 表名 EMPLOYEE 表の構成は以下のとおりとします。

列名 データ型

ID INT

NAME CHARACTER(10)

データベースは Windows 上に作成し、ローカル接続でアクセスするものとします。

■表の作成

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition では、表を作成する際、表定義の他に表 に対応する DSI と DSO を定義し、データの格納先となるデータベーススペースを定義する 必要があります。Symfoware Server Lite Edition では、デフォルトデータベーススペース に作成されます。各種の資源の定義操作は、Symfoware Server に付属している WebDBtools という Web ブラウザベースのツールを用いて、対話的に行うことができます。

定義操作を DDL 文を直接実行することによって行うこともできます。その場合は、以下の DDL 文を rdbddlex コマンドで実行してください。

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition の場合

CREATE DATABASE COMPANY;

CREATE DBSPACE MYDBSP_1 ALLOCATE FILE C:¥COMPANY.dbs ATTRIBUTE SPACE (1M);

CREATE SCHEMA GENERAL;

CREATE TABLE GENERAL.EMPLOYEE (ID INT,NAME CHARACTER(10));

CREATE DSO DSO01 FROM GENERAL.EMPLOYEE TYPE SEQUENTIAL (PAGESIZE(4));

CREATE DSI DSI01 DSO DSO01 ALLOCATE DATA ON MYDBSP_1 SIZE 100K;

GRANT ALL PRIVILEGES ON GENERAL.EMPLOYEE TO PUBLIC;

GRANT ALL PRIVILEGES ON SCHEMA GENERAL TO PUBLIC;

GRANT ALL PRIVILEGES ON DBSPACE MYDBSP_1 TO PUBLIC;

Symfoware Server Lite Edition の場合

CREATE DATABASE COMPANY;

CREATE SCHEMA GENERAL;

CREATE TABLE GENERAL.EMPLOYEE (ID INT,NAME CHARACTER(10));

GRANT ALL PRIVILEGES ON GENERAL.EMPLOYEE TO PUBLIC;

GRANT ALL PRIVILEGES ON SCHEMA GENERAL TO PUBLIC;

GRANT ALL PRIVILEGES ON DBSPACE MYDBSP_1 TO PUBLIC;

■表へのデータ投入

表を作成したら、初期データを格納しておきます。

Symfoware Server Standard Edition、Symfoware Server Enterprise Edition、または、

Symfoware Server Enterprise Extended Edition の場合、データを投入するには、rdbsloader コマンドを使用します。

rdbsloader -mi -i COMPANY.DSI01 -t C:¥TABLE01.dat

ここで、TABLE01.dat は、以下のような内容のテキストファイルです。これが初期投入する データとなります。

1,”dog”

2,”cat”

3,”lion”

Symfoware Server Lite Edition の場合、データを投入するには、rdbupt コマンドを使用 します。

rdbupt –ma –b COMPANY.GENERAL.EMPLOYEE –t C:¥TABLE01.dat

A.2 データを検索するプログラム

データを検索する Java アプリケーションです。

Symfoware Server に接続するユーザーのユーザー名を“UID”、パスワードを“PWD”とし ています。環境に合わせて変更してください。

import java.sql.*;

import java.io.*;

public class test01 {

public static void main(String args[]) {

try {

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

// Statementオブジェクトを作成する。

Statement stmt = con.createStatement();

// SELECT文を実行して、ResultSetオブジェクトを得る。

ResultSet rs = stmt.executeQuery(

"SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1 OR ID=3");

// ResultSetから1行ずつデータを取り出す。

while (rs.next()) {

// IDとNAMEの値を取り出す。

int iID = rs.getInt(1);

String sName = rs.getString(2);

// 取り出した値を表示させる。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

// ResultSetオブジェクトを破棄する。

// Statementオブジェクトを破棄する。

stmt.close();

// INSERT文をコミットする。

con.commit();

// データベースから切断する。

con.close();

}

// データベースに関する例外をキャッチする。

catch (SQLException e) {

// 例外オブジェクトからエラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

System.out.println("SQLSTATE : " + e.getSQLState());

System.out.println("ERROR CODE : " + e.getErrorCode());

e.printStackTrace();

}

// データベース以外のエラーが発生した場合の例外をキャッチする。

catch (Exception e) {

// エラー情報を取り出す。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

} }

}

A.3 データを更新するプログラム

データを更新する Java アプリケーションです。

Symfoware Server に接続するユーザーのユーザー名を“UID”、パスワードを“PWD”とし ています。環境に合わせて変更してください。

import java.sql.*;

import java.io.*;

public class test02 {

public static void main(String args[]) {

try {

// データベースに接続する。

Class.forName("com.fujitsu.symfoware.jdbc.SYMDriver");

String url = "jdbc:symfold:///COMPANY";

Connection con = DriverManager.getConnection(url,"UID","PWD");

// 自動コミットを解除する。

con.setAutoCommit(false);

// Statementオブジェクトを作成する。

Statement stmt = con.createStatement();

// INSERT文を実行する。

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(4,'tiger')");

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(5,'monkey')");

stmt.executeUpdate(

"INSERT INTO GENERAL.EMPLOYEE(ID,NAME) VALUES(6,'rat')");

// UPDATE文を実行する。

stmt.executeUpdate(

"UPDATE GENERAL.EMPLOYEE SET NAME = 'gorilla' WHERE ID=5");

// DELETE文を実行する。

stmt.executeUpdate(

"DELETE FROM GENERAL.EMPLOYEE WHERE id=6");

// 更新をコミットする。

con.commit();

// Statementオブジェクトを破棄する。

ドキュメント内 Javaアプリケーション開発ガイド入門編 (ページ 43-56)

関連したドキュメント