Jira issue DERBY-546 created.
 
Piet Blok----- Original Message -----
From: Piet Blok
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]);
                }
            }
        }
    }
 
}
 

Reply via email to