code: protected void initTableInfo(final Connection _con,
                                   final String _sql,
                                   final Map<String, TableInformation> _cache4Name)
          throws SQLException
      {
          Statement stmt = null;
          final ResultSet rs;
          if (_sql == null) {
              rs = _con.getMetaData().getTables(null, null, "%", new String[] { "TABLE", "VIEW" });
          } else        {
              stmt = _con.createStatement();
              rs = stmt.executeQuery(_sql);
          }
          try {
              while (rs.next()) {
                  final String tableName = rs.getString("TABLE_NAME").toUpperCase();
                  // ignore the tables managed by hibernate
                  if (!tableName.startsWith(NamingStrategy.HIBERNATEPREFIX.toUpperCase())
                                  && (tableName.startsWith("T_") || tableName.startsWith("V_"))) {
                      _cache4Name.put(tableName, new TableInformation(tableName));
                  }
              }
          } finally {
              rs.close();
              if (stmt != null) {
                  stmt.close();
              }
          }
      }
docs: <p>
  Fetches all table name for all tables and views. If a SQL statement is
  given, this SQL statement is used instead of using the JDBC meta data
  methods. The SQL select statement must define this column
  <ul>
  <li><b><code>TABLE_NAME</code></b> for the real name of the table.</li>
  </ul>
  </p>
  
  @param _con SQL connection
  @param _sql SQL statement which must be executed if the JDBC
  functionality does not work (or null if JDBC meta data is used
  to fetch all tables and views)
  @param _cache4Name map used to fetch depending on the table name the
  related table information
  @throws SQLException if information could not be fetched from the data
  base