Spring JDBC関連メモ

SpringFramework JDBCによるデータベースアクセスに関するメモ。

Spring例外クラス…どんな例外があるのか、(かなり怪しい和訳で)一覧に書き出してみた。

  • org.springframework.core.NestedRuntimeException
    • org.springframework.dao.DataAccessException(Spring DBアクセス例外最上位クラス)
      • org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException(データソースが見つからない)
      • org.springframework.dao.CleanupFailureDataAccessException(DBアクセス終了後のクリーンアップ処理[コネクションを閉じる処理など]で異常発生)
      • org.springframework.dao.ConcurrencyFailureException(DBのロック処理(楽観的ロック、ロックの取得)が上手く行かなかった場合に発生)
      • org.springframework.dao.DataAccessResourceFailureException(DBアクセスに必要なリソース(JDBC等)が取得出来ない場合)
      • org.springframework.dao.DataIntegrityViolationException(DB更新[Integrity:保全]に失敗)
      • org.springframework.dao.DataRetrievalFailureException(ID等による検索結果0件?)
      • org.springframework.dao.InvalidDataAccessApiUsageException(APIの間違った利用方法[:コンパイルが必要なSQL文をコンパイルしてない等]が発覚)
      • org.springframework.dao.InvalidDataAccessResourceUsageException(データソースの使い方、指定方法がおかしい)
      • org.springframework.dao.PermissionDeniedDataAccessException(アクセス権限がないDB要素に対するアクセス)
      • org.springframework.dao.UncategorizedDataAccessException(上記以外のSQL例外?)
  • エラー発生時にAPIが以下のファイル・クラスを利用してエラー内容を識別している。情報を追加、更新する場合はxml(修正した)ファイルをクラスパス最上位に配置すればOK?(Javadoc API:SQLErrorCodeSQLExceptionTranslatorより)
    • org.springframework.jdbc.support.SQLErrorCodes.java
    • org.springframework.jdbc.support.SQLErrorCodes.xml
  • DBキー項目が数値型の項目に全角文字で検索かけたところ、以下の例外が発生。エラーチェックは未実施なので、エラー対応方法等も併せて検討(属性チェック、チェックしても出る場合の対応)。
008/03/10 00:55:13 989 [INFO] SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [select USER_ID, DATA_ID, TEL_HOME, POINTS, REG_YMD, UPD_TIMESTAMP from MST_SMPL where user_id = ? ]; ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP"; nested exception is org.postgresql.util.PSQLException: ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP"
Caused by: org.postgresql.util.PSQLException: ERROR: character 0xc282 of encoding "UTF8" has no equivalent in "EUC_JP"
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1525)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1309)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:354)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:258)
	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
	at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:595)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:538)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:588)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:613)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:645)
	at org.springframework.jdbc.object.SqlQuery.execute(SqlQuery.java:112)
	at org.springframework.jdbc.object.SqlQuery.findObject(SqlQuery.java:252)
	at org.springframework.jdbc.object.SqlQuery.findObject(SqlQuery.java:313)
	at org.springframework.jdbc.object.SqlQuery.findObject(SqlQuery.java:320)