簡體   English   中英

使用 Java 確定 Derby 數據庫架構版本?

[英]Determine Derby Database Schema Version With Java?

我發現這篇文章描述了如何使用 derbyrun.jar 從命令行獲取 Derby 數據庫模式版本。

如何從我的 Java 程序中確定模式版本?

編輯:我回答了我自己的問題,但我認為這不是最好的解決方案。 當有人提出更好的解決方案時,我會接受它作為答案。

我想出了一些方法來在 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 對象可能會在其屬性之一中包含有關數據庫架構的信息,但我已經檢查了所有這些信息,但沒有。 它們僅提供有關驅動程序版本的信息(可能與數據庫架構不同)。

這是多年以后,但我一直在尋找有關從 Java 使用 syscs_util.syscs_get_database_property('DataDictionaryVersion') 的信息,並找到了這篇文章。 以為我會分享一種從 Java 獲取 DataDictionaryVersion 的更簡單方法。 此示例沒有任何異常或其他錯誤處理,但提供了有關如何執行此操作的基本代碼。 我最初編寫了更多代碼來確定 Statement execute() 調用返回一個包含一列 varchar 數據的 ResultSet,列名稱為 1。我使用 ResultSet.getMetaData() 來獲取列信息。 一旦我弄清楚了,我選擇假設列信息不會改變並且不保留該代碼。

String connectionURL = "jdbc:derby:dbname";
java.sql.Connection conn = java.sql.DriverManager.getConnection(dbConnectionURL)
String ddVersionQueryStr = "values syscs_util.syscs_get_database_property( 'DataDictionaryVersion' )";
java.sql.Statement stmt = conn.createStatement();
boolean isResultSet = stmt.execute(ddVersionQueryStr);
java.sql.ResultSet resultSet = stmt.getResultSet();
resultSet.next();
System.out.print("ddVersion = " + resultSet.getString(1) + "\n");

對我來說,這個輸出是“10.11”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM