Cómo puedo analizar una URL JDBC (oracle o sqlserver) para obtener el nombre de host, el puerto y el nombre de la base de datos. Los formatos de la URL son diferentes.Cómo analizar una URL JDBC para obtener el nombre de host, el puerto, etc.
Respuesta
empezar con algo como esto:
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());
salida de lo anterior:
derby localhost 1527 /netld;collation=TERRITORY_BASED:PRIMARY
gracias ¡Mucho! Puedo obtener host, port fácilmente de esta manera, pero tengo que analizar la ruta para obtener el databasename –
Sí, seguro que sí. – brettw
no podrá analizar _alguno servidor_ de jdbc: oracle: thin: @ some.server: 1521: XXX con ese –
que no funcionó para mí. Se me ocurrieron estos métodos, basados en la suposición de que el nombre de host y el puerto siempre están unidos por dos puntos. Esa suposición es válida para todas las bases de datos con las que tengo que lidiar en el trabajo (Oracle, Vertica, MySQL, etc.). Pero probablemente no funcione para algo que no llega a un puerto de red.
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 + "'");
}
Utilizo esta clase en mis proyectos. El uso es realmente simple.
/**
* 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. Analizar el nombre de host y el puerto de cuerda o url
- 2. ¿Obtener el número de puerto para el nombre del servicio?
- 3. ¿Cómo averiguo mi URL MySQL, host, puerto y nombre de usuario?
- 4. ¿Cómo obtener el nombre de host completo + número de puerto en Application_Start of Global.aspx?
- 5. ¿Cómo puedo obtener el nombre de host (con puerto) que un servlet está en
- 6. ¿Cómo usar Django para obtener el nombre del servidor host?
- 7. Cómo obtener el nombre de host actual en Heroku
- 8. Partes de una dirección URL: host, puerto, ruta
- 9. cómo analizar el nombre de imagen de la imagen url
- 10. Determine el nombre de host URL sin usar HttpContext.Current?
- 11. Cómo validar el nombre de host (puede ser IP) y el número de puerto (CString)
- 12. ¿Puedo asignar un nombre de host * y * un puerto con/etc/hosts?
- 13. JDBC URL para el cliente Oracle XA
- 14. Rieles: ¿cómo obtener el host actual o construir una URL con él?
- 15. Obtener url partes sin host
- 16. ASP.NET MVC: cómo analizar la cadena url para obtener RouteData
- 17. ¿Cómo configuro el nombre de host para Rails ActionMailer?
- 18. Hbase: Cómo especificar el nombre de host para Hbase master
- 19. Obtener solo el nombre de dominio de una URL?
- 20. Obtiene el nombre de host de una clase DataSource
- 21. Obtener el nombre de host del controlador de Rails
- 22. ¿Puede recuperar el nombre de host y el puerto de un System.Net.Sockets.TcpClient?
- 23. Obtener el nombre de host de la dirección IP
- 24. cómo obtener la ruta URL en el host local y en el servidor?
- 25. ¿Cómo eliminar el nombre y el puerto de la aplicación de la url en grial?
- 26. Agregando nombre de host a/etc/hosts en Linux
- 27. Powershell: Obtener nombre de host FQDN
- 28. Cómo obtengo el host y el puerto en una aplicación de Rails
- 29. Obtener nombre de host sin utilizar HttpRequest
- 30. obtener la URL absoluta con EL
¿Qué quieres decir con que quieres analizar una URL de jdbc? Puedes usar regex. Puede dar un ejemplo – Ank
jdbc: jtds: sqlserver: // nombrehost: puerto/nombrebd o jdbc: jtds: sqlserver: // nombrehost: puerto; nombrebasedatos = nombrebd o jdbc: oráculo: delgado: @nombrehost: puerto: nombrebd –