import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; import com.mysql.jdbc.Driver; public class Reproduce41484 { private static final String TABLE_NAME = "your_table"; private static final String CATALOG_NAME = "your_catalog"; private static final String DB_USERNAME = "username"; private static final String DB_PASSWD = "pass"; private static final String DB_URI = "jdbc:mysql://127.0.0.1/db?cacheResultSetMetadata=true"; private void testReproduce41484() throws SQLException { BasicDataSource ds = new BasicDataSource(); ds.setUrl(DB_URI); ds.setUsername(DB_USERNAME); ds.setPassword(DB_PASSWD); ds.setDriverClassName(Driver.class.getCanonicalName()); ds.setAccessToUnderlyingConnectionAllowed(true); Connection c = ds.getConnection(); DatabaseMetaData meta = c.getMetaData(); ResultSet tables = meta.getTables(CATALOG_NAME, null, TABLE_NAME, null); while(tables.next()) { String tableName = tables.getString("TABLE_NAME"); meta.getColumns(null, null, tableName, "%"); } } public static void main(String[] args) { try { new Reproduce41484().testReproduce41484(); } catch(Throwable t) { t.printStackTrace(); } } }