In contrast to EmbeddedDriver, a connection attribute create=true is not recognized when presented as a property in a Properties object.
As a workaround I append the attributes from the Properties object to the url string before invoking the connect() method: then a new database is created and a connection is established.
Next code fragment illustrates the bug and the workaround:
private static final ClientDriver clientDriver = new ClientDriver();
private Connection getClientConnection(String database,
Properties connectionProperties) throws SQLException {
try {
System.out.println("Try to connect with properties");
String connectionURL = "jdbc:
derby://127.0.0.1:1527/" + database;
System.out.println("connectionURL: " + connectionURL);
Connection rv = clientDriver.connect(connectionURL,
connectionProperties);
System.out.println("Connection: " + rv);
return rv;
} catch (SQLException e) {
System.out.println("Try to connect with URL attributes");
StringBuffer sb = new StringBuffer();
for (Enumeration enu = connectionProperties.propertyNames(); enu
.hasMoreElements();) {
String key = (String) enu.nextElement();
sb.append(';');
sb.append(key);
sb.append('=');
sb.append(connectionProperties.getProperty(key, ""));
}
String connectionURL = "jdbc:
derby://127.0.0.1:1527/" + database
+ sb.toString();
System.out.println("connectionURL: " + connectionURL);
Connection rv = clientDriver.connect(connectionURL,
connectionProperties);
System.out.println("Connection: " + rv);
System.out
.println("!!!!!!!!!!! seems a bug: Properties argument in ClientDriver.connect(String, Properties) has not been used");
return rv;
}
}