【发布时间】:2019-04-20 00:49:07
【问题描述】:
大家好,我有一个带有 PostgreSQL 数据库的 heroku Web 应用程序。如图所示,DATABASE_URL 已设置:
但由于某种原因,当我尝试访问环境变量以连接到数据库时,我得到一个 NullPointerException,因为显然 DATABASE_URL 不存在:
private static Connection getConnection() throws URISyntaxException, SQLException {
URI dbUri = new URI(System.getenv("DATABASE_URL"));
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath();
return DriverManager.getConnection(dbUrl, username, password);
}
这里发生了什么?我该如何解决?
【问题讨论】:
-
确切的错误和回溯是什么?我们需要知道具体是什么在生成 NPE。
-
另外,您泄露了 Postgres 连接字符串的很大一部分(您的整个用户名和一大段密码)。在您做任何其他事情之前,请rotate your credentials。您屏幕截图中的内容将永远受到影响。
-
@Chris 这只是一个测试数据库,我想将其用于以后的目的。错误发生在第一行代码 System.getenv cant find my database_url environment
-
好的,现在你已经泄露了两个完整的连接字符串。即使他们是测试数据库,请立即轮换他们的凭据。
-
不要描述错误,显示给我们。如果
name是null,java.lang.System.getenv(name)应该只抛出NullPointerException。如果未设置该值,则此调用应返回 null。如果发生了这种情况,那么当您在其上调用.getUserInfo()时,或者当您从中实例化URI时,您的错误就会发生。但我们不必猜测……请告诉我们确切的错误。见How to Ask。
标签: postgresql heroku nullpointerexception environment-variables database-connection