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]);
}
}
}
}
}