2011-01-26 66 views
0

在我的應用程序體系結構中,一個URL指向一個公司數據源。因此,爲了解決在同一個數據庫上有多個公司的問題,我想探索向JDBC Url添加額外參數的可能性。JDBC URL屬性如何工作

基本上我想要做的就是用下面的URL做一個連接。

JDBC:SQLSERVER://192.168.128.2:1433;的databaseName = businessesDB; companyId = 25

我有測試該連接不受影響通過添加自定義的參數去的JDBC URL。但我的問題是我如何訪問我的應用程序的companyId屬性。

我可以使用從數據源獲得的Connection對象檢索該屬性的值嗎?

回答

0

看起來您正在使用Microsoft SQL Server驅動程序。查看http://msdn.microsoft.com/en-us/library/ms378988.aspx,您應該可以使用applicationName屬性來確定哪個業務使用該連接。這樣做的好處是SQL Server分析和日誌記錄工具也能識別連接中的業務。

爲了以編程方式獲取applicationName,或者在您的情況下,您可以使用java.sql.Driver.getPropertyInfo(url,properties)。

+0

java.sql.Driver中也不com.microsoft.sqlserver.jdbc.SQLServerDriver有一個爲getPropertyInfo方法。設置applicationName屬性是一個很好的習慣,但它並不打算用於我要給它,也許我應該重新提出這個問題。 – JorgeO 2011-02-02 14:05:57

+0

以下是getPropertyInfo方法的Microsoft文檔。希望能幫助到你。 http://msdn.microsoft.com/en-us/library/ms378773.aspx – 2011-02-02 14:36:02

0

我要發佈我如何解決它。但是我仍然認爲應該有一個更好的解決方案,不管實際的數據庫如何,它都可以工作,因爲Mysql Jdbc URL將它們的參數分隔爲一個http URL,並且SQL Server JDBC驅動程序期望用屬性分隔;字符。畢竟這就是爲什麼JDBC存在。

使用正則表達式應用到URL,我得到帕拉姆像這樣:

 String url = company.getJdbcUrl(); 

     Pattern p = Pattern.compile("companyId=(\\d+)"); 
     Matcher m = p.matcher(url); 

     if (m.find()) { 
      companyId = m.group(1); 
      _logger.info("companyId found"); 
     } else { 
      _logger.error("could not get companyId"); 
     }