java - 解析 postgres URL
问题描述
我正在尝试解析 postgres db 凭据,格式如下:
postgres://usernname:password@hostaddress:port/databasename
我正在调用一种方法,该方法在一行中以字符串的形式返回这些凭据,并试图找出是否有一种简单的方法可以通过用户名、密码端口等而不是使用正则表达式来解析它们。
解决方案
正如@OneCricketeer 在评论中所建议的那样——你可以使用 URI 解析器来做这种事情,在我看来这也是一个最好的解决方案。你可以这样实现它:
try {
URI uri = new URI("postgres://username:password@host.com:123/databasename");
String[] userAndPassword = uri.getUserInfo().split(":");
String user = userAndPassword[0];
String password = userAndPassword[1];
String host = uri.getHost();
int port = uri.getPort();
String database = uri.getPath().substring(1);
} catch (URISyntaxException e) {
e.printStackTrace(); // handle invalid JDBC URL syntax
}
还要考虑一下您的 JDBC URL - 也许您有可能将这些参数单独保存在某些配置中,并创建 JDBC URL 作为这些参数的连接?它会让事情变得更容易——这样你就不需要从 URL 中提取任何参数。
我在下面的旧答案(这比使用 URI 解析器更糟糕,但我留下它只是为了与上述解决方案进行比较):
我会使用正则表达式,在这种情况下不会那么难,然后很容易提取你需要的部分数据。
但是,您也可以使用split
String 的方法来获取您需要的部分字符串,例如:
String url = "postgres://username:password@hostaddress:port/databasename";
String[] urlSplitByColon = url.split(":");
String[] passwordAndHost = urlSplitByColon[2].split("@");
String[] portAndDatabaseName = urlSplitByColon[3].split("/");
String username = urlSplitByColon[1].substring(2); // substring to cut out double slash at the beginning of username
String password = passwordAndHost[0];
String host = passwordAndHost[1];
String port = portAndDatabaseName[0];
String databaseName = portAndDatabaseName[1];
但我真的建议使用正则表达式。
推荐阅读
- python - 如何将 CSV 文件转换为 PDF
- ruby-on-rails - Ruby - 如何使用 Shrine 设置 data_uri (base64) 文件名
- xaml - Xamarin.Forms 异常 System.Reflection.TargetInvocationException:调用的目标已引发异常
- python - Python列表函数或列表理解
- woocommerce - wc_get_product 总是返回 false
- sql - 如何将查询加载到 SQL 函数中的变量并返回它
- angular - 如何从 Firebase 存储中检索文件(而不仅仅是其下载 URL)
- asp.net - 是否可以在另一个网站内托管 powerbi.com?
- python - 计算 Dataframe 列中出现的次数
- javascript - Angular2 + / Typescript中的Lodash - groupBy在尝试传递参数时无法调用其类型缺少调用签名的表达式?