01: package com.teamkonzept.db;
02:
03: import java.sql.SQLException;
04: import com.teamkonzept.lib.*;
05:
06: /**
07: Analyzed database related exceptions
08: using the SQL State
09: general codes here
10: Singleton
11: */
12: public class DatabaseErrorAnalyzer implements ErrorAnalyzer,
13: DatabaseErrorCodes {
14: private static DatabaseErrorAnalyzer instance = null;
15:
16: /**
17: looks for a database specific analyzer
18: */
19: public static DatabaseErrorAnalyzer getInstance() {
20: if (instance == null) {
21: if (TKDBManager.getDBVendor() == QueryConstants.ORACLE) {
22: instance = new OracleErrorAnalyzer();
23: } else if (TKDBManager.getDBVendor() == QueryConstants.SYBASE) {
24: instance = new SybaseErrorAnalyzer();
25: } else if (TKDBManager.getDBVendor() == QueryConstants.POSTGRESQL) {
26: instance = new PostgreSQLErrorAnalyzer();
27: }
28: // cant happen
29: }
30: return instance;
31: }
32:
33: protected DatabaseErrorAnalyzer() {
34: }
35:
36: public TKException analyzeSQLError(SQLException e) {
37: String state = e.getSQLState();
38:
39: if (state == null) {
40: return new TKDatabaseException("Unbekannter Fehler",
41: UNDEFINED, NORMAL_SEVERITY, false, e);
42: }
43:
44: // Wrong URL format.
45: if (state.equals("JZ003")) {
46: return new TKDatabaseException(
47: "Ihre Konfiguration ist inkorrekt", CONFIGURATION,
48: HIGH_SEVERITY, true, e);
49: }
50:
51: // Host unreachable.
52: if (state.equals("JZ006")) {
53: // das kann aber auch Konfiguration sein ! falsche Portnummer
54: return new TKDatabaseException(
55: "Die Datenbank ist nicht erreichbar",
56: CONNECTION_BROKEN, TEMPORARY_SEVERITY, true, e);
57: }
58:
59: // Login failed.
60: if (state.equals("ZZZZZ") || state.equals("JZ00L")) {
61: return new TKDatabaseException(
62: "Ihre Konfiguration ist inkorrekt", CONFIGURATION,
63: HIGH_SEVERITY, true, e);
64: }
65:
66: // JDBC-Support not loaded.
67: if (state.equals("JZ0SJ")) {
68: return new TKDatabaseException(
69: "Keine JDBC-Unterstützung in der DB installiert",
70: CONFIGURATION, HIGH_SEVERITY, true, e);
71: }
72:
73: // Foreign key constraint violation.
74: if (state.equals("23000") || state.equals("23001")) {
75: return new TKDatabaseException(
76: "Referentielle Integrität verletzt",
77: FK_CONSTRAINT_VIOLATION, NORMAL_SEVERITY, true, e);
78: }
79: return new TKDatabaseException("Unbekannter Fehler", UNDEFINED,
80: NORMAL_SEVERITY, false, e);
81: }
82:
83: }
|