You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2012/02/07 19:25:12 UTC

svn commit: r1241546 - in /incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db: DBDatabase.java DBDatabaseDriver.java

Author: doebele
Date: Tue Feb  7 18:25:12 2012
New Revision: 1241546

URL: http://svn.apache.org/viewvc?rev=1241546&view=rev
Log:
EMPIREDB-126
new overloads for preparedStatements

Modified:
    incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
    incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java

Modified: incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java?rev=1241546&r1=1241545&r2=1241546&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java (original)
+++ incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java Tue Feb  7 18:25:12 2012
@@ -668,13 +668,13 @@ public abstract class DBDatabase extends
      * Returns the value of the first row/column of a sql-query as an object.
      * 
      * @param sqlCmd the SQL-Command
+     * @param sqlParams list of query parameter values
      * @param conn a valid connection to the database.
      * 
      * @return the first column in the current row as a Java object 
      *         or <code>null</code> if there was no value 
      */
-
-    public Object querySingleValue(String sqlCmd, Connection conn)
+    public Object querySingleValue(String sqlCmd, Object[] sqlParams, Connection conn)
     {
         checkOpen(); 
         ResultSet rs = null;
@@ -684,7 +684,7 @@ public abstract class DBDatabase extends
             if (log.isDebugEnabled())
                 log.debug("executing: " + sqlCmd);
             // Get the next Value
-            rs = driver.executeQuery(sqlCmd, null, false, conn);
+            rs = driver.executeQuery(sqlCmd, sqlParams, false, conn);
             if (rs == null)
                 throw new UnexpectedReturnValueException(rs, "driver.executeQuery()");
             // Check Result
@@ -708,17 +708,48 @@ public abstract class DBDatabase extends
     }
 
     /**
+     * Returns the value of the first row/column of a sql-query as an object.
+     * 
+     * @param sqlCmd the SQL-Command
+     * @param conn a valid connection to the database.
+     * 
+     * @return the first column in the current row as a Java object 
+     *         or <code>null</code> if there was no value 
+     */
+    public Object querySingleValue(String sqlCmd, Connection conn)
+    {
+        return querySingleValue(sqlCmd, (Object[])null, conn);  
+    }
+    
+    /**
+     * Returns the value of the first row/column of a sql-query as an int.
+     * 
+     * @param sqlCmd the SQL statement
+     * @param sqlParams list of query parameter values
+     * @param defVal the default value if no value was returned by the database
+     * @param conn a valid connection to the database.
+     *
+     * @return the result as a int value, if no result the int value 0
+     */
+    public int querySingleInt(String sqlCmd, Object[] sqlParams, int defVal, Connection conn)
+    { 
+        Object value = querySingleValue(sqlCmd, sqlParams, conn);
+        return ObjectUtils.getInteger(value, defVal);
+    }
+
+    /**
      * Returns the value of the first row/column of a sql-query as an int.
      * 
      * @param sqlCmd the SQL statement
      * @param defVal the default value if no value was returned by the database
      * @param conn a valid connection to the database.
+     *
      * @return the result as a int value, if no result the int value 0
      */
     public int querySingleInt(String sqlCmd, int defVal, Connection conn)
     { 
         Object value = querySingleValue(sqlCmd, conn);
-        return ((value != null) ? Integer.parseInt(value.toString()) : defVal);
+        return ObjectUtils.getInteger(value, defVal);
     }
 
     /**
@@ -726,66 +757,72 @@ public abstract class DBDatabase extends
      * 
      * @param sqlCmd the SQL statement
      * @param conn a valid connection to the database.
+     *
      * @return the result as a int value, if no result the int value 0
      */
     public final int querySingleInt(String sqlCmd, Connection conn)
     { 
         return querySingleInt(sqlCmd, 0, conn);
     }
-    
+
     /**
      * Returns the value of the first row/column of a sql-query as a long.
      * 
      * @param sqlCmd the SQL statement
+     * @param sqlParams list of query parameter values
      * @param defVal the default value
      * @param conn a valid connection to the database.
      * 
      * @return the result as a long value, if no result the long value 0
      */
-    public long querySingleLong(String sqlCmd, long defVal, Connection conn)
+    public long querySingleLong(String sqlCmd, Object[] sqlParams, long defVal, Connection conn)
     { 
-        Object value = querySingleValue(sqlCmd, conn);
+        Object value = querySingleValue(sqlCmd, sqlParams, conn);
         return ((value != null) ? Long.parseLong(value.toString()) : defVal);
     }
-
+    
     /**
      * Returns the value of the first row/column of a sql-query as a long.
      * 
      * @param sqlCmd the SQL statement
+     * @param defVal the default value
      * @param conn a valid connection to the database.
+     * 
      * @return the result as a long value, if no result the long value 0
      */
-    public final long querySingleLong(String sqlCmd, Connection conn)
+    public long querySingleLong(String sqlCmd, long defVal, Connection conn)
     { 
-        return querySingleLong(sqlCmd, 0, conn);
+        Object value = querySingleValue(sqlCmd, conn);
+        return ((value != null) ? Long.parseLong(value.toString()) : defVal);
     }
-    
+
     /**
-     * Returns the value of the first row/column of a sql-query as a double.
+     * Returns the value of the first row/column of a sql-query as a long.
      * 
      * @param sqlCmd the SQL statement
-     * @param defVal the default value
      * @param conn a valid connection to the database.
-     * 
+     *
      * @return the result as a long value, if no result the long value 0
      */
-    public double querySingleDouble(String sqlCmd, double defVal, Connection conn)
+    public final long querySingleLong(String sqlCmd, Connection conn)
     { 
-        Object value = querySingleValue(sqlCmd, conn);
-        return ((value != null) ? Double.parseDouble(value.toString()) : defVal);
+        return querySingleLong(sqlCmd, 0, conn);
     }
-
+    
     /**
-     * Returns the value of the first row/column of a sql-query as a double.
+     * Returns the value of the first row/column of a sql-query as a string.
      * 
      * @param sqlCmd the SQL statement
+     * @param sqlParams list of query parameter values
+     * @param defVal the default value if no value was returned by the database
      * @param conn a valid connection to the database.
-     * 
-     * @return the result as a long value, if no result the long value 0
+     *
+     * @return the result as a String object, if no result a empty String
      */
-    public final double querySingleDouble(String sqlCmd, Connection conn)
+    public String querySingleString(String sqlCmd, Object[] sqlParams, String defVal, Connection conn)
     { 
-        return querySingleDouble(sqlCmd, 0.0, conn);
+        Object value = querySingleValue(sqlCmd, sqlParams, conn);
+        return ((value != null) ? value.toString() : defVal);
     }
     
     /**
@@ -794,7 +831,8 @@ public abstract class DBDatabase extends
      * @param sqlCmd the SQL statement
      * @param defVal the default value if no value was returned by the database
      * @param conn a valid connection to the database.
-     * @return the result as a String object, if no result a emtpy String
+     *
+     * @return the result as a String object, if no result a empty String
      */
     public String querySingleString(String sqlCmd, String defVal, Connection conn)
     { 
@@ -807,7 +845,8 @@ public abstract class DBDatabase extends
      * 
      * @param sqlCmd the SQL statement
      * @param conn a valid connection to the database.
-     * @return the result as a String object, if no result a emtpy String
+     *
+     * @return the result as a String object, if no result a empty String
      */
     public final String querySingleString(String sqlCmd, Connection conn)
     { 

Modified: incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java?rev=1241546&r1=1241545&r2=1241546&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java (original)
+++ incubator/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java Tue Feb  7 18:25:12 2012
@@ -399,13 +399,18 @@ public abstract class DBDatabaseDriver i
      * @param pstmt the prepared statement
      * @param sqlParams list of objects
      */
-    protected void prepareStatement(PreparedStatement pstmt, Object[] sqlParams)
+    protected void prepareStatement(PreparedStatement pstmt, Object[] sqlParams, Connection conn)
     	throws SQLException
 	{
         for (int i=0; i<sqlParams.length; i++)
         {
             Object value = sqlParams[i];
-            addStatementParam(pstmt, i+1, value);
+            try {
+                addStatementParam(pstmt, i+1, value, conn);
+            } catch(SQLException e) {
+                log.error("SQLException: Unable to set prepared statement parameter {} to '{}'", i+1, StringUtils.toString(value));
+                throw e;
+            }
         }
 	}
 
@@ -415,7 +420,7 @@ public abstract class DBDatabaseDriver i
      * @param pstmt the prepared statement
      * @param sqlParams list of objects
      */
-    protected void addStatementParam(PreparedStatement pstmt, int paramIndex, Object value)
+    protected void addStatementParam(PreparedStatement pstmt, int paramIndex, Object value, Connection conn)
 		throws SQLException
 	{
         if (value instanceof DBBlobData)
@@ -539,7 +544,7 @@ public abstract class DBDatabaseDriver i
                     ? conn.prepareStatement(sqlCmd, Statement.RETURN_GENERATED_KEYS)
                     : conn.prepareStatement(sqlCmd);
     	        stmt = pstmt;
-	            prepareStatement(pstmt, sqlParams);
+	            prepareStatement(pstmt, sqlParams, conn);
 	            count = pstmt.executeUpdate(); 
             }
             else
@@ -584,7 +589,7 @@ public abstract class DBDatabaseDriver i
 	        {	// Use prepared statement
 	            PreparedStatement pstmt = conn.prepareStatement(sqlCmd, type, ResultSet.CONCUR_READ_ONLY);
 	            stmt = pstmt;
-	            prepareStatement(pstmt, sqlParams);
+	            prepareStatement(pstmt, sqlParams, conn);
 	            return pstmt.executeQuery();
 	        } else
 	        {	// Use simple statement
@@ -593,6 +598,7 @@ public abstract class DBDatabaseDriver i
 	        }
         } catch(SQLException e) {
             // close statement (if not null)
+            log.error("Error executing query '"+sqlCmd+"' --> "+e.getMessage(), e);
             close(stmt);
             throw e;
         }