Fix key handling and streamline code
diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java
index b425a61..4c8ede0 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/auxiliary/disk/jdbc/JDBCDiskCache.java
@@ -37,6 +37,7 @@
 import org.apache.commons.jcs3.auxiliary.AuxiliaryCacheAttributes;
 import org.apache.commons.jcs3.auxiliary.disk.AbstractDiskCache;
 import org.apache.commons.jcs3.auxiliary.disk.jdbc.dsfactory.DataSourceFactory;
+import org.apache.commons.jcs3.engine.behavior.ICache;
 import org.apache.commons.jcs3.engine.behavior.ICacheElement;
 import org.apache.commons.jcs3.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs3.engine.logging.behavior.ICacheEvent;
@@ -99,9 +100,6 @@
     /** # of times getMatching was called */
     private final AtomicInteger getMatchingCount = new AtomicInteger(0);
 
-    /** if count % interval == 0 then log */
-    private static final int LOG_INTERVAL = 100;
-
     /** db connection pool */
     private final DataSourceFactory dsFactory;
 
@@ -150,33 +148,20 @@
         {
             log.debug( "Putting [{0}] on disk.",  () -> ce.getKey());
 
-            final byte[] element;
-
             try
             {
-                element = getElementSerializer().serialize( ce );
+                final byte[] element = getElementSerializer().serialize( ce );
+                insertOrUpdate( ce, con, element );
             }
             catch ( final IOException e )
             {
                 log.error( "Could not serialize element", e );
-                return;
             }
-
-            insertOrUpdate( ce, con, element );
         }
         catch ( final SQLException e )
         {
             log.error( "Problem getting connection.", e );
         }
-
-        if ( log.isInfoEnabled() )
-        {
-            if ( updateCount.get() % LOG_INTERVAL == 0 )
-            {
-                // TODO make a log stats method
-                log.info( "Update Count [{0}]", updateCount);
-            }
-        }
     }
 
     /**
@@ -222,25 +207,19 @@
     private boolean insertRow( final ICacheElement<K, V> ce, final Connection con, final byte[] element )
     {
         boolean exists = false;
-        final String sqlI = "insert into "
-                + getJdbcDiskCacheAttributes().getTableName()
-                + " (CACHE_KEY, REGION, ELEMENT, MAX_LIFE_SECONDS, IS_ETERNAL, CREATE_TIME, UPDATE_TIME_SECONDS, SYSTEM_EXPIRE_TIME_SECONDS) "
-                + " values (?, ?, ?, ?, ?, ?, ?, ?)";
+        final String sqlI = String.format("insert into %s"
+                + " (CACHE_KEY, REGION, ELEMENT, MAX_LIFE_SECONDS, IS_ETERNAL, CREATE_TIME, UPDATE_TIME_SECONDS,"
+                + " SYSTEM_EXPIRE_TIME_SECONDS) "
+                + " values (?, ?, ?, ?, ?, ?, ?, ?)", getJdbcDiskCacheAttributes().getTableName());
 
         try (PreparedStatement psInsert = con.prepareStatement( sqlI ))
         {
-            psInsert.setString( 1, (String) ce.getKey() );
+            psInsert.setString( 1, ce.getKey().toString() );
             psInsert.setString( 2, this.getCacheName() );
             psInsert.setBytes( 3, element );
             psInsert.setLong( 4, ce.getElementAttributes().getMaxLife() );
-            if ( ce.getElementAttributes().getIsEternal() )
-            {
-                psInsert.setString( 5, "T" );
-            }
-            else
-            {
-                psInsert.setString( 5, "F" );
-            }
+            psInsert.setString( 5, ce.getElementAttributes().getIsEternal() ? "T" : "F" );
+
             final Timestamp createTime = new Timestamp( ce.getElementAttributes().getCreateTime() );
             psInsert.setTimestamp( 6, createTime );
 
@@ -282,9 +261,9 @@
      */
     private void updateRow( final ICacheElement<K, V> ce, final Connection con, final byte[] element )
     {
-        final String sqlU = "update " + getJdbcDiskCacheAttributes().getTableName()
+        final String sqlU = String.format("update %s"
                 + " set ELEMENT  = ?, CREATE_TIME = ?, UPDATE_TIME_SECONDS = ?, " + " SYSTEM_EXPIRE_TIME_SECONDS = ? "
-                + " where CACHE_KEY = ? and REGION = ?";
+                + " where CACHE_KEY = ? and REGION = ?", getJdbcDiskCacheAttributes().getTableName());
 
         try (PreparedStatement psUpdate = con.prepareStatement( sqlU ))
         {
@@ -322,8 +301,8 @@
     {
         boolean exists = false;
         // don't select the element, since we want this to be fast.
-        final String sqlS = "select CACHE_KEY from " + getJdbcDiskCacheAttributes().getTableName()
-            + " where REGION = ? and CACHE_KEY = ?";
+        final String sqlS = String.format("select CACHE_KEY from %s where REGION = ? and CACHE_KEY = ?",
+                getJdbcDiskCacheAttributes().getTableName());
 
         try (PreparedStatement psSelect = con.prepareStatement( sqlS ))
         {
@@ -366,37 +345,36 @@
 
         ICacheElement<K, V> obj = null;
 
-        byte[] data = null;
-        try
+        // region, key
+        final String selectString = String.format("select ELEMENT from %s where REGION = ? and CACHE_KEY = ?",
+                getJdbcDiskCacheAttributes().getTableName());
+
+        try (Connection con = getDataSource().getConnection())
         {
-            // region, key
-            final String selectString = "select ELEMENT from " + getJdbcDiskCacheAttributes().getTableName()
-                + " where REGION = ? and CACHE_KEY = ?";
-
-            try (Connection con = getDataSource().getConnection())
+            try (PreparedStatement psSelect = con.prepareStatement( selectString ))
             {
-                try (PreparedStatement psSelect = con.prepareStatement( selectString ))
-                {
-                    psSelect.setString( 1, this.getCacheName() );
-                    psSelect.setString( 2, key.toString() );
+                psSelect.setString( 1, this.getCacheName() );
+                psSelect.setString( 2, key.toString() );
 
-                    try (ResultSet rs = psSelect.executeQuery())
+                try (ResultSet rs = psSelect.executeQuery())
+                {
+                    byte[] data = null;
+
+                    if ( rs.next() )
                     {
-                        if ( rs.next() )
+                        data = rs.getBytes( 1 );
+                    }
+
+                    if ( data != null )
+                    {
+                        try
                         {
-                            data = rs.getBytes( 1 );
+                            // USE THE SERIALIZER
+                            obj = getElementSerializer().deSerialize( data, null );
                         }
-                        if ( data != null )
+                        catch ( final IOException | ClassNotFoundException e )
                         {
-                            try
-                            {
-                                // USE THE SERIALIZER
-                                obj = getElementSerializer().deSerialize( data, null );
-                            }
-                            catch ( final Exception e )
-                            {
-                                log.error( "Problem getting item for key [{0}]", key, e );
-                            }
+                            log.error( "Problem getting item for key [{0}]", key, e );
                         }
                     }
                 }
@@ -408,14 +386,6 @@
                     key, sqle );
         }
 
-        if ( log.isInfoEnabled() )
-        {
-            if ( getCount.get() % LOG_INTERVAL == 0 )
-            {
-                // TODO make a log stats method
-                log.info( "Get Count [{0}]", getCount );
-            }
-        }
         return obj;
     }
 
@@ -440,37 +410,33 @@
 
         final Map<K, ICacheElement<K, V>> results = new HashMap<>();
 
-        try
+        // region, key
+        final String selectString = String.format("select ELEMENT from %s where REGION = ? and CACHE_KEY like ?",
+                getJdbcDiskCacheAttributes().getTableName());
+
+        try (Connection con = getDataSource().getConnection())
         {
-            // region, key
-            final String selectString = "select CACHE_KEY, ELEMENT from " + getJdbcDiskCacheAttributes().getTableName()
-                + " where REGION = ? and CACHE_KEY like ?";
-
-            try (Connection con = getDataSource().getConnection())
+            try (PreparedStatement psSelect = con.prepareStatement( selectString ))
             {
-                try (PreparedStatement psSelect = con.prepareStatement( selectString ))
-                {
-                    psSelect.setString( 1, this.getCacheName() );
-                    psSelect.setString( 2, constructLikeParameterFromPattern( pattern ) );
+                psSelect.setString( 1, this.getCacheName() );
+                psSelect.setString( 2, constructLikeParameterFromPattern( pattern ) );
 
-                    try (ResultSet rs = psSelect.executeQuery())
+                try (ResultSet rs = psSelect.executeQuery())
+                {
+                    while ( rs.next() )
                     {
-                        while ( rs.next() )
+                        final byte[] data = rs.getBytes(1);
+                        if ( data != null )
                         {
-                            final String key = rs.getString( 1 );
-                            final byte[] data = rs.getBytes( 2 );
-                            if ( data != null )
+                            try
                             {
-                                try
-                                {
-                                    // USE THE SERIALIZER
-                                    final ICacheElement<K, V> value = getElementSerializer().deSerialize( data, null );
-                                    results.put( (K) key, value );
-                                }
-                                catch ( final Exception e )
-                                {
-                                    log.error( "Problem getting items for pattern [{0}]", pattern, e );
-                                }
+                                // USE THE SERIALIZER
+                                final ICacheElement<K, V> value = getElementSerializer().deSerialize( data, null );
+                                results.put( value.getKey(), value );
+                            }
+                            catch ( final IOException | ClassNotFoundException e )
+                            {
+                                log.error( "Problem getting items for pattern [{0}]", pattern, e );
                             }
                         }
                     }
@@ -483,14 +449,6 @@
                     pattern, sqle );
         }
 
-        if ( log.isInfoEnabled() )
-        {
-            if ( getMatchingCount.get() % LOG_INTERVAL == 0 )
-            {
-                // TODO make a log stats method
-                log.info( "Get Matching Count [{0}]", getMatchingCount);
-            }
-        }
         return results;
     }
 
@@ -519,21 +477,18 @@
     protected boolean processRemove( final K key )
     {
         // remove single item.
-        String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName()
-            + " where REGION = ? and CACHE_KEY = ?";
+        final String sqlSingle = String.format("delete from %s where REGION = ? and CACHE_KEY = ?",
+                getJdbcDiskCacheAttributes().getTableName());
+        // remove all keys of the same name group.
+        final String sqlPartial = String.format("delete from %s where REGION = ? and CACHE_KEY like ?",
+                getJdbcDiskCacheAttributes().getTableName());
 
         try (Connection con = getDataSource().getConnection())
         {
-            boolean partial = false;
-            if ( key instanceof String && key.toString().endsWith( NAME_COMPONENT_DELIMITER ) )
-            {
-                // remove all keys of the same name group.
-                sql = "delete from " + getJdbcDiskCacheAttributes().getTableName()
-                    + " where REGION = ? and CACHE_KEY like ?";
-                partial = true;
-            }
+            boolean partial = key.toString().endsWith(ICache.NAME_COMPONENT_DELIMITER);
+            String sql = partial ? sqlPartial : sqlSingle;
 
-            try (PreparedStatement psSelect = con.prepareStatement( sql ))
+            try (PreparedStatement psSelect = con.prepareStatement(sql))
             {
                 psSelect.setString( 1, this.getCacheName() );
                 if ( partial )
@@ -573,10 +528,11 @@
         // it should never get here from the abstract disk cache.
         if ( this.jdbcDiskCacheAttributes.isAllowRemoveAll() )
         {
+            final String sql = String.format("delete from %s where REGION = ?",
+                    getJdbcDiskCacheAttributes().getTableName());
+
             try (Connection con = getDataSource().getConnection())
             {
-                final String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName() + " where REGION = ?";
-
                 try (PreparedStatement psDelete = con.prepareStatement( sql ))
                 {
                     psDelete.setString( 1, this.getCacheName() );
@@ -624,8 +580,8 @@
                 getTableState().setState( TableState.DELETE_RUNNING );
                 final long now = System.currentTimeMillis() / 1000;
 
-                final String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName()
-                    + " where IS_ETERNAL = ? and REGION = ? and ? > SYSTEM_EXPIRE_TIME_SECONDS";
+                final String sql = String.format("delete from %s where IS_ETERNAL = ? and REGION = ?"
+                        + " and ? > SYSTEM_EXPIRE_TIME_SECONDS", getJdbcDiskCacheAttributes().getTableName());
 
                 try (PreparedStatement psDelete = con.prepareStatement( sql ))
                 {
@@ -679,7 +635,7 @@
     @Override
     public void processDispose()
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), (K)"none", ICacheEventLogger.DISPOSE_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), (K)null, ICacheEventLogger.DISPOSE_EVENT );
 
         try
         {
@@ -706,8 +662,8 @@
         int size = 0;
 
         // region, key
-        final String selectString = "select count(*) from " + getJdbcDiskCacheAttributes().getTableName()
-            + " where REGION = ?";
+        final String selectString = String.format("select count(*) from %s where REGION = ?",
+                getJdbcDiskCacheAttributes().getTableName());
 
         try (Connection con = getDataSource().getConnection())
         {