Làm cách nào để phân tích cú pháp URL JDBC (oracle hoặc sqlserver) để nhận tên máy chủ, cổng và tên cơ sở dữ liệu. Các định dạng của URL khác nhau.Làm cách nào để phân tích url JDBC để nhận tên máy chủ, cổng, v.v ...?
Trả lời
Bắt đầu với một cái gì đó như thế này:
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());
Output từ trên:
derby localhost 1527 /netld;collation=TERRITORY_BASED:PRIMARY
cảm ơn rất nhiều, tôi có thể nhận host, port một cách dễ dàng theo cách này, nhưng tôi phải phân tích đường dẫn để lấy databasename –
Có, bạn chắc chắn sẽ làm. – brettw
bạn sẽ không thể phân tích cú pháp _some server_ ngoài jdbc: oracle: thin: @ some.server: 1521: XXX với điều đó –
Đó không làm việc cho tôi. Tôi đã đưa ra các phương pháp này, dựa trên giả định rằng tên máy chủ và cổng luôn được nối với nhau bằng dấu hai chấm. Giả định đó giữ cho tất cả các cơ sở dữ liệu mà tôi phải xử lý tại nơi làm việc (Oracle, Vertica, MySQL, v.v.). Nhưng nó có thể không làm việc cho một cái gì đó mà không tiếp cận với một cổng mạng.
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 + "'");
}
Tôi sử dụng lớp này trong các dự án của mình. Việc sử dụng thực sự đơn giản.
/**
* 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. Làm cách nào để tìm ra URL, máy chủ, cổng và tên người dùng của tôi?
- 2. Làm cách nào để nhận nhãn URL khi phân tích cú pháp URL yêu cầu?
- 3. Phân tích hostname và cổng từ chuỗi hoặc url
- 4. ASP.NET MVC: cách phân tích chuỗi url để nhận RouteData
- 5. Làm cách nào để phân tích cú pháp URL web?
- 6. Cách phân tích url để nhận url cơ sở? - Rails 3.1
- 7. Làm cách nào để nhận AWSTats để phân tích các tệp nhật ký cũ?
- 8. Làm cách nào để phân tích cú pháp Tên chủ đề thay thế từ X509Certificate2?
- 9. làm thế nào để phân tích ra tên hình ảnh từ url hình ảnh
- 10. WCF: Cách nhận IP máy chủ hoặc tên máy chủ
- 11. Cách tốt nhất để phân tích chuỗi truy vấn URL
- 12. Keytool Java cách dễ dàng để thêm chứng chỉ máy chủ từ url/cổng
- 13. Làm cách nào để nhận nhật ký máy chủ SVN?
- 14. Súp đẹp để phân tích cú pháp url để nhận dữ liệu url khác
- 15. Chuỗi phân tích cú pháp cho Tên miền/tên máy chủ
- 16. Làm cách nào để nhận tiêu đề từ Lỗi Máy chủ 401
- 17. Trên máy chủ cục bộ, làm cách nào để chọn số cổng miễn phí?
- 18. số cổng máy chủ mysql
- 19. Làm cách nào để nhận số hàng trong JDBC?
- 20. Rails phân tích url để băm (đường)
- 21. Nhận số cổng cho tên dịch vụ?
- 22. Tôi làm cách nào để phân tích tệp .hprof?
- 23. Cách tốt nhất để phân tích URL bằng C?
- 24. Làm cách nào để đặt cổng mà Máy chủ Emacs sử dụng?
- 25. Làm cách nào để nhận URL của yêu cầu?
- 26. Làm cách nào để xác định tên máy chủ để xác thực máy chủ của khách hàng bằng C#
- 27. Làm cách nào để làm cho URL không phân biệt chữ hoa chữ thường trong máy chủ Linux
- 28. Làm cách nào để phân tích cú pháp tên tháng unicode để nhận datetime trong Python 2.7
- 29. Làm thế nào để có được tên miền máy chủ
- 30. Cách định cấu hình độ phân giải tên máy chủ để sử dụng máy chủ DNS tùy chỉnh trong Java?
Ý bạn là gì khi muốn phân tích cú pháp url jdbc. Bạn có thể sử dụng regex. Bạn có thể đưa ra một ví dụ – Ank
jdbc: jtds: sqlserver: // tên máy chủ: cổng/dbname hoặc jdbc: jtds: sqlserver: // tên máy chủ: cổng; databaseName = dbname hoặc jdbc: oracle: thin: @hostname: port: dbname –