質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

TERASOLUNA

TERASOLUNA(テラソルナ)はNTTデータの独自フレームワークです。 比較的大規模なシステム開発における 開発手順・フレームワーク・サポートなどの製品群により構成されています。

Q&A

解決済

1回答

2635閲覧

terasoluna2,Spring,ibatis使用時、データベースアクセス例外のコード取得について

t.n.rider

総合スコア3

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

TERASOLUNA

TERASOLUNA(テラソルナ)はNTTデータの独自フレームワークです。 比較的大規模なシステム開発における 開発手順・フレームワーク・サポートなどの製品群により構成されています。

1グッド

1クリップ

投稿2020/07/18 09:02

編集2020/07/18 12:25

Terasoluna2系でデータベースアクセス例外のエラーコードを取得したいと考えています。

よろしくお願いいたします。

java初学者です

terasoluna2系において、オラクルDBに対してspring-ibatisを使ってアクセスをしています。
実現したいことは、例外発生時にORAコードを取得することです。

SQLExceptionをキャッチしてオラクルの例外コードを取得したいのですが、Springの例外に変換されていることについての理解が薄く、具体的な手段が分かっていません。

以下のようなイメージの物を、実装したいと思っています

java

1 try{ 2 // SQL発行 3 updateDAO.execute("update", paramMap); 4 }(catch SQLException e){    // ---① 5 // エラーコード判定 6   if(e.getErrorCode() == zzzz){ 7 // 想定内のエラーならば 8 // メッセージをセットして正常処理に流す 9    message = "データ登録失敗でした"; 10  // ロールバックを宣言(?)    // ---② 11   }else{ 12 // 例外が想定外ならフレームワークに投げる 13   throw new SystemException(e) 14 } 15} 16// 以下正常処理 17 18result.setAAA(message); 19return result;

①の部分をどうしたらよいか・・・と考えています。
形にこだわってはいませんので、ORAコードを取得して、処理を続行できることを探しています。
その後は、②でロールバックを宣言できればとも考えていますが、まずは①の部分をと考えてます。

どうぞよろしくお願いいたします。

仕様 
Terasoluna 2.0.2
Spring flamework 2.5
Strurs 1.2
ibatis 2.3
Oracle 11g
JAVA 1.6

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/18 09:38 編集

terasoluna2 ってことは spring framework 2.x struts 1.2.x ibatis 2.x という化石のはずですが、正しいですか?
t.n.rider

2020/07/18 09:40

左様です。 古い分、ネット上には情報が少なくて困ってます。
退会済みユーザー

退会済みユーザー

2020/07/18 09:59

とりあえず terasoluna spring framework struts ibatis あたりのバージョンを追記しましょう
退会済みユーザー

退会済みユーザー

2020/07/18 09:59

あとコードはマークダウンで
t.n.rider

2020/07/18 10:35

ありがとうございます。修正しました。 ただし、それぞれのライブラリのバージョンは、現時点では正確ではありません。 確認取れ次第修正します。
Orlofsky

2020/07/18 12:10

Oracle11Cは既にどんなに大きなバグが発生しても新たなパッチは提供しない古いバージョンです。 サポート契約が有効ならオラクル・ライセンスのバージョンアップも無料ですからさっさとバージョンアップしましょう。
t.n.rider

2020/07/18 12:23

ご回答ありがとうございます。 すでにあるシステムの改修ですので、その部分の対処はできませんし、解決にもなりません。ご忠告は受け取らせていただきます。ありがとうございます。
guest

回答1

0

ベストアンサー

SpringとiBatisの組み合わせで発生したSQL実行時例外は、以下のようにデータソース実行中の例外をtry~catchすることで判定できます。
接続するデータベースによってスローされる例外クラスが異なり、OracleDBの場合はSQLSyntaxErrorException以外にもその状況に応じて異なる例外がスローされます。

java

1 public String findOne() { 2 try { 3 return repository.findOne(); 4 } catch(Exception e) { 5 SQLSyntaxErrorException ex = (SQLSyntaxErrorException)e.getCause(); 6 7 int venderCode = ex.getErrorCode(); 8 return null; 9 } 10 }

例えば発行したSQLがSQLの文法エラーで、「ORA-00925: INTOキーワードがありません。」だった場合、上記の ex.getErrorCodeは925が返されます。

この例ではSQLを実行するrepository以下のコードに対して直接try~catchをしましたが、処理横断的に例外ハンドリングをする場合は、例外ハンドラを設けて共通化をされた方が良いでしょう。

投稿2020/07/21 12:37

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問