You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Piet Blok <pb...@wanadoo.nl> on 2005/08/27 12:16:28 UTC

Client driver fails to provide all DriverPropertyInfo's

Hi,

The Client Driver, in contrast to Embedded Driver, fails to report all DriverPropertyInfo's. It seems that it not only ignores the Properties object (see Jira DERBY_530), but it also ignores connection attributes appended to the connection url.

If no one objects I will create a Jira issue.

See below a piece of code that demonstrates this behaviour:

Piet Blok



import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Properties;

import org.apache.derby.jdbc.ClientDriver;
import org.apache.derby.jdbc.EmbeddedDriver;

public class DerbyConnector {

    private static final String DERBY_CONNECTION_PREFIX = "jdbc:derby:";

    private static final String MY_DATABASE = "MyDatabase";

    private static final String MY_HOST = "//127.0.0.1:1527/";

    static {
        new ClientDriver();
        new EmbeddedDriver();
    }

    public static void main(String[] args) {
        DerbyConnector connector = new DerbyConnector();
        try {
            Properties connectionProperties = new Properties();
            connectionProperties.setProperty("create", "true");
            connectionProperties.setProperty("dataEncryption", "true");
            connector.printInfo(MY_HOST + MY_DATABASE, connectionProperties);
            connector.printInfo(MY_DATABASE, connectionProperties);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public Connection connect(String url) throws SQLException {
        return DriverManager.getConnection(DERBY_CONNECTION_PREFIX + url);
    }

    public Connection connect(String url, Properties connectionProperties)
            throws SQLException {
        return connect(DERBY_CONNECTION_PREFIX + url
                + connectionPropertiesString(connectionProperties));
    }

    public DriverPropertyInfo[] getPropertyInfos(String url, Properties props)
            throws SQLException {
        String connectionString = DERBY_CONNECTION_PREFIX + url
                + connectionPropertiesString(props);
        System.out.println("ConnectionString = " + connectionString);
        Driver driver = DriverManager.getDriver(connectionString);
        return driver.getPropertyInfo(connectionString, props);
    }

    private String connectionPropertiesString(Properties connectionProperties) {
        StringBuffer sb = new StringBuffer();
        for (Enumeration enumeration = connectionProperties.propertyNames(); enumeration
                .hasMoreElements();) {
            String key = (String) enumeration.nextElement();
            sb.append(';');
            sb.append(key);
            sb.append('=');
            sb.append(connectionProperties.getProperty(key));
        }
        return sb.toString();

    }
    
    private void printInfo(String url, Properties connectionProperties)
            throws SQLException {
        System.out.println("========= " + url + " =========");
        DriverPropertyInfo[] infos = getPropertyInfos(url, connectionProperties);
        for (int i = 0; i < infos.length; i++) {
            System.out.println("DriverPropertyInfo " + i);
            System.out.println("  description: " + infos[i].description);
            System.out.println("  " + infos[i].name + " = " + infos[i].value);
            System.out.println("  required = " + infos[i].required);
            if (infos[i].choices != null) {
                for (int j = 0; j < infos[i].choices.length; j++) {
                    System.out.println("    choice " + j + ": "
                            + infos[i].choices[j]);
                }
            }
        }
    }

}

Re: Client driver fails to provide all DriverPropertyInfo's

Posted by Piet Blok <pb...@wanadoo.nl>.
Jira issue DERBY-546 created.

Piet Blok----- Original Message ----- 
  From: Piet Blok 
  To: Derby Discussion 
  Sent: Saturday, August 27, 2005 12:16 PM
  Subject: Client driver fails to provide all DriverPropertyInfo's


  Hi,

  The Client Driver, in contrast to Embedded Driver, fails to report all DriverPropertyInfo's. It seems that it not only ignores the Properties object (see Jira DERBY_530), but it also ignores connection attributes appended to the connection url.

  If no one objects I will create a Jira issue.

  See below a piece of code that demonstrates this behaviour:

  Piet Blok



  import java.sql.Connection;
  import java.sql.Driver;
  import java.sql.DriverManager;
  import java.sql.DriverPropertyInfo;
  import java.sql.SQLException;
  import java.util.Enumeration;
  import java.util.Properties;

  import org.apache.derby.jdbc.ClientDriver;
  import org.apache.derby.jdbc.EmbeddedDriver;

  public class DerbyConnector {

      private static final String DERBY_CONNECTION_PREFIX = "jdbc:derby:";

      private static final String MY_DATABASE = "MyDatabase";

      private static final String MY_HOST = "//127.0.0.1:1527/";

      static {
          new ClientDriver();
          new EmbeddedDriver();
      }

      public static void main(String[] args) {
          DerbyConnector connector = new DerbyConnector();
          try {
              Properties connectionProperties = new Properties();
              connectionProperties.setProperty("create", "true");
              connectionProperties.setProperty("dataEncryption", "true");
              connector.printInfo(MY_HOST + MY_DATABASE, connectionProperties);
              connector.printInfo(MY_DATABASE, connectionProperties);
          } catch (SQLException e) {
              e.printStackTrace();
          }
      }

      public Connection connect(String url) throws SQLException {
          return DriverManager.getConnection(DERBY_CONNECTION_PREFIX + url);
      }

      public Connection connect(String url, Properties connectionProperties)
              throws SQLException {
          return connect(DERBY_CONNECTION_PREFIX + url
                  + connectionPropertiesString(connectionProperties));
      }

      public DriverPropertyInfo[] getPropertyInfos(String url, Properties props)
              throws SQLException {
          String connectionString = DERBY_CONNECTION_PREFIX + url
                  + connectionPropertiesString(props);
          System.out.println("ConnectionString = " + connectionString);
          Driver driver = DriverManager.getDriver(connectionString);
          return driver.getPropertyInfo(connectionString, props);
      }

      private String connectionPropertiesString(Properties connectionProperties) {
          StringBuffer sb = new StringBuffer();
          for (Enumeration enumeration = connectionProperties.propertyNames(); enumeration
                  .hasMoreElements();) {
              String key = (String) enumeration.nextElement();
              sb.append(';');
              sb.append(key);
              sb.append('=');
              sb.append(connectionProperties.getProperty(key));
          }
          return sb.toString();

      }
      
      private void printInfo(String url, Properties connectionProperties)
              throws SQLException {
          System.out.println("========= " + url + " =========");
          DriverPropertyInfo[] infos = getPropertyInfos(url, connectionProperties);
          for (int i = 0; i < infos.length; i++) {
              System.out.println("DriverPropertyInfo " + i);
              System.out.println("  description: " + infos[i].description);
              System.out.println("  " + infos[i].name + " = " + infos[i].value);
              System.out.println("  required = " + infos[i].required);
              if (infos[i].choices != null) {
                  for (int j = 0; j < infos[i].choices.length; j++) {
                      System.out.println("    choice " + j + ": "
                              + infos[i].choices[j]);
                  }
              }
          }
      }

  }

Re: Client driver fails to provide all DriverPropertyInfo's

Posted by Kathey Marsden <km...@sbcglobal.net>.
Piet Blok wrote:

>Hi,
>
>The Client Driver, in contrast to Embedded Driver, fails to report all DriverPropertyInfo's. It seems that it not only ignores the Properties object (see Jira DERBY_530), but it also ignores connection attributes appended to the connection url.
>
>If no one objects I will create a Jira issue.
>
>  
>
Yes, I think the general issue is that the embedded attributes are
getting passed through to the server if specified on the URL but are not
being handled properly when specified by properties  or for
getPropertyInfo.  The client will need to know about all of the embedded
attributes in addition to the ones it processes like user, traceFile
etc.  Can you link this issue to DERBY_530.


Kathey