Refactored methods in VersionableDaoBase etc + added Query-By-Example for CdmEntityDa...
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / CdmDataSourceBase.java
index 1e246cd31e1b08466492e0b3b6cb6f3d90a57b4b..b05e3d2f35fd3820a2eeb70843552440523605af 100644 (file)
@@ -11,6 +11,9 @@ package eu.etaxonomy.cdm.database;
 \r
 import java.sql.Connection;\r
 import java.sql.DriverManager;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.sql.Statement;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
@@ -23,28 +26,88 @@ import eu.etaxonomy.cdm.database.types.IDatabaseType;
  */\r
 abstract class CdmDataSourceBase implements ICdmDataSource {\r
        private static final Logger logger = Logger.getLogger(CdmDataSourceBase.class);\r
+\r
        \r
-       \r
+       private Connection getConnection() {\r
 \r
+               Connection mConn = null;\r
+               try {\r
+                       IDatabaseType dbType = getDatabaseType().getDatabaseType();\r
+                       String classString = dbType.getClassString();\r
+                       Class.forName(classString);\r
+                       String mUrl = dbType.getConnectionString(this);\r
+                       mConn = DriverManager.getConnection(mUrl, getUsername(), getPassword());\r
+               } catch (ClassNotFoundException e) {\r
+                       logger.error("Database driver class could not be loaded\n" + "Exception: " + e.toString());\r
+               } catch(SQLException e) {\r
+                       logger.error("Problems with database connection\n" + "Exception: " + e.toString());\r
+               }\r
+               return mConn;\r
+       }\r
+\r
+       \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.database.ICdmDataSource#testConnection()\r
         */\r
-       public boolean testConnection() {\r
+       public boolean testConnection() throws DataSourceNotFoundException {\r
+\r
+               IDatabaseType dbType = getDatabaseType().getDatabaseType();\r
+               String classString = dbType.getClassString();\r
                try {\r
-                       IDatabaseType dbType = getDatabaseType().getDatabaseType();\r
-                       String classString = dbType.getClassString();\r
                        Class.forName(classString);\r
-                       \r
                        String mUrl = dbType.getConnectionString(this);\r
-                       Connection mConn = DriverManager.getConnection(mUrl, getUserName(), getPassword());\r
+                       Connection mConn = DriverManager.getConnection(mUrl, getUsername(), getPassword());\r
                        if (mConn != null){\r
                                return true;\r
-                       }else{\r
-                               return false;\r
                        }\r
-               } catch (Exception e) {\r
-                       logger.warn(e.getMessage());\r
-                       return false;\r
+               } catch (ClassNotFoundException e) {\r
+                       throw new DataSourceNotFoundException(e);\r
+               } catch (SQLException e) {\r
+                       throw new DataSourceNotFoundException(e);\r
+               }\r
+               return false;\r
+       }\r
+\r
+       \r
+    /**\r
+     * Executes a query and returns the ResultSet.\r
+     * @return ResultSet for the query.\r
+     */\r
+       public ResultSet executeQuery (String query) {\r
+\r
+               ResultSet rs;\r
+               try {\r
+                       if (query == null){\r
+                               return null;\r
+                       }\r
+                       Connection mConn = getConnection();\r
+                       Statement mStmt = mConn.createStatement();\r
+                       rs = mStmt.executeQuery(query);\r
+                       return rs;\r
+               } catch(SQLException e) {\r
+                       logger.error("Problems when executing query \n  " + query + " \n" + "Exception: " + e);\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+    /**\r
+     * Executes an update\r
+     * @return return code\r
+     */\r
+       public int executeUpdate (String sqlUpdate) {\r
+               \r
+               int result;\r
+               try {\r
+                       if (sqlUpdate == null){\r
+                               return 0;\r
+                       }\r
+                       Connection mConn = getConnection();\r
+                       Statement mStmt = mConn.createStatement();\r
+                       result = mStmt.executeUpdate(sqlUpdate);\r
+                       return result;\r
+               } catch(SQLException e) {\r
+                       logger.error("Problems when executing update\n  " + sqlUpdate + " \n" + "Exception: " + e);\r
+                       return 0;\r
                }\r
        }\r
 }\r