如何解析JDBC URL(oracle或sqlserver)以獲取主機名,端口和數據庫名稱。 URL的格式不同。如何解析JDBC URL以獲取主機名,端口等?
回答
開始是這樣的:從上面的
String url = "jdbc:derby://localhost:1527/netld;collation=TERRITORY_BASED:PRIMARY"; String cleanURI = url.substring(5); URI uri = URI.create(cleanURI); System.out.println(uri.getScheme()); System.out.println(uri.getHost()); System.out.println(uri.getPort()); System.out.println(uri.getPath());
輸出:
derby localhost 1527 /netld;collation=TERRITORY_BASED:PRIMARY
謝謝非常多!我可以通過這種方式輕鬆獲得主機,端口,但是我必須解析獲取數據庫名稱的路徑 – 2012-02-15 02:52:12
是的,您確定。 – brettw 2012-02-15 04:30:22
你不能解析_some server_出jdbc:oracle:thin:@ some.server:1521:XXX那個 – 2012-07-18 17:24:01
這並沒有爲我工作。我想出了這些方法,假設主機名和端口總是通過冒號連接在一起。這個假設適用於我在工作中需要處理的所有數據庫(Oracle,Vertica,MySQL等)。但它可能不適用於不能連接到網絡端口的東西。
String url = null; // set elsewhere in the class
final public String regexForHostAndPort = "[.\\w]+:\\d+";
final public Pattern hostAndPortPattern = Pattern.compile(regexForHostAndPort);
public String getHostFromUrl() {
Matcher matcher = hostAndPortPattern.matcher(url);
matcher.find();
int start = matcher.start();
int end = matcher.end();
if(start >= 0 && end >= 0) {
String hostAndPort = url.substring(start, end);
String [] array = hostAndPort.split(":");
if(array.length >= 2)
return array[0];
}
throw new IllegalArgumentException("couldn't find pattern '" + regexForHostAndPort + "' in '" + url + "'");
}
public int getPortFromUrl() {
Matcher matcher = hostAndPortPattern.matcher(url);
matcher.find();
int start = matcher.start();
int end = matcher.end();
if(start >= 0 && end >= 0) {
String hostAndPort = url.substring(start, end);
String [] array = hostAndPort.split(":");
if(array.length >= 2)
return Integer.parseInt(array[1]);
}
throw new IllegalArgumentException("couldn't find pattern '" + regexForHostAndPort + "' in '" + url + "'");
}
我在我的項目中使用這個類。 使用非常簡單。
/**
* Split di una url JDBC nei componenti.
* Estrae i componenti di una uri JDBC del tipo: <br>
* String url = "jdbc:derby://localhost:1527/netld;collation=TERRITORY_BASED:PRIMARY"; <br>
* nelle rispettive variabili pubbliche.
* @author Nicola De Nisco
*/
public class JdbcUrlSplitter
{
public String driverName, host, port, database, params;
public JdbcUrlSplitter(String jdbcUrl)
{
int pos, pos1, pos2;
String connUri;
if(jdbcUrl == null || !jdbcUrl.startsWith("jdbc:")
|| (pos1 = jdbcUrl.indexOf(':', 5)) == -1)
throw new IllegalArgumentException("Invalid JDBC url.");
driverName = jdbcUrl.substring(5, pos1);
if((pos2 = jdbcUrl.indexOf(';', pos1)) == -1)
{
connUri = jdbcUrl.substring(pos1 + 1);
}
else
{
connUri = jdbcUrl.substring(pos1 + 1, pos2);
params = jdbcUrl.substring(pos2 + 1);
}
if(connUri.startsWith("//"))
{
if((pos = connUri.indexOf('/', 2)) != -1)
{
host = connUri.substring(2, pos);
database = connUri.substring(pos + 1);
if((pos = host.indexOf(':')) != -1)
{
port = host.substring(pos + 1);
host = host.substring(0, pos);
}
}
}
else
{
database = connUri;
}
}
}
- 1. 解析主機名和端口從字符串或URL
- 2. 如何解析qt中的網絡主機名+端口?
- 3. 獲取從jdbc連接到oracle服務器的活動主機和端口(不解析url)
- 4. .NET - 獲取協議,主機和端口
- 5. 如何從odbc獲取主機名和端口
- 6. 「主機名無法解析」從「ftp」URL
- 7. Java(Jsoup):如何解析http://主機:端口
- 8. 無法解析主機「<url here>」;沒有與主機名
- 9. 主機如何解析網絡域名?
- 10. IP如何解析主機名?
- 11. 從URL獲取主機域名?
- 12. 在rails上獲取URL的主機名
- 13. 如何爲主機名和本地主機配置端口?
- 14. Windows主機名稱解析
- 15. 無法解析主機名
- 16. WinSock2 getaddrinfo解析主機名
- 17. Graylog不解析主機名
- 18. 節點提取網址,如何去掉主機名端口
- 19. 給定的協議,用戶名,密碼,主機名,端口和路徑如何獲取URL
- 20. 如何獲取Rails應用程序中的主機和端口
- 21. 如何從System.Net.EndPoint獲取主機地址和端口?
- 22. 如何獲取tomcat主機和端口號的負載均衡?
- 23. 如何從URL獲取並解析Json?
- 24. 如何在Symfony2中解析獲取url?
- 25. 零件URL的:主機,端口,路徑
- 26. 如何從Perl中的URL獲取主機名?
- 27. 重寫URL - 如何獲取主機名和路徑?
- 28. 如何在Javascript中獲取沒有主機名的引用URL?
- 29. ActionScript 3:如何從URL獲取主機名?
- 30. Kestrel支持URL /主機名,還是隻能監聽端口?
你的意思是你想解析一個jdbc url。你可以使用正則表達式。您可以舉一個例子 – Ank 2012-02-15 02:25:16
jdbc:jtds:sqlserver:// hostname:port/dbname或jdbc:jtds:sqlserver:// hostname:port; databaseName = dbname或jdbc:oracle:thin:@hostname:port:dbname – 2012-02-15 02:41:45