我想出了一些东西来获取 Java 中的模式版本,但它很丑陋(而且还不够完整)。我希望有人有更好的东西:
public static void main(String[] args) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
String strConnectionURL = "jdbc:derby:c:\data\tomcat7\active\LearnyErnie\data\derby;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
String strCommand = "values syscs_util.syscs_get_database_property( 'DataDictionaryVersion' );";
InputStream inputStream = new ByteArrayInputStream(strCommand.getBytes("UTF-8"));
ij.runScript(connection, inputStream, "UTF-8", outputStream, "UTF-8");
String strOutput = new String(outputStream.toByteArray());
System.out.println("Output = " + strOutput);
}
strOutput 将包含以下文本:
Output = CONNECTION0* - jdbc:derby:c:\data\tomcat7\active\LearnyErnie\data\derby
* = current connection
ij> values syscs_util.syscs_get_database_property( 'DataDictionaryVersion' );
1
(long line of dashes taken out because it squirrels up the SO output)
10.9
1 row selected
ij>
上述输出中的架构版本为“10.9”。由你来解析它。(我今天不关心这个。这只是为了在帮助->关于对话框中提供额外信息,我只会将整个丑陋的混乱写到屏幕上。)
我们当然不能指望这种解析逻辑在未来的版本中工作,甚至不能指望对 syscs_get_database_property() 本身的调用。
我希望那里有人有一种更有弹性的方法来做到这一点。
编辑: 我后来想到,也许 JDBC DatabaseMetaData 对象会在其属性之一中包含有关数据库模式的信息,但我已经检查了所有这些,但事实并非如此。它们仅提供有关驱动程序版本的信息(可能与数据库架构不同)。