我正在寻找一种从java.sql.Connection对象获取密码的方法。我知道DatabaseMetaData对象中有一个getUserName()方法,但遗憾的是没有相应的getPassword()方法。在Netbeans中使用调试器我可以看到密码的字段,所以必须有一种方法来使用反射来获取这些信息,但到目前为止我一直无法弄清楚如何。
答案 0 :(得分:2)
由JDBC的实现者提供,因为用户和密码作为Map传递给Driver。
知道密码是什么的一种方法是扩展驱动程序并包含它。
class CustomDriver extends ImplementerDriver {
@Override
public Connection connect(String url, Properties info) throws SQLException {
super.connect(url, info);
// Extract password from info.
}
public String getPassword() {
....
}
}
答案 1 :(得分:1)
正如我评论的那样,唯一的方法就是查看代码。例如,对于使用最新驱动程序的MySQL(5.1.15)。你可以得到这样的密码:
public static void main(String[] args) throws Exception{
ConnectionImpl con = (ConnectionImpl) DriverManager.getConnection("jdbc:mysql://localhost:3908/mydb?user=edalorzo&password=mandrake");
System.out.println(con.getProperties().get("password"));
con.close();
}
但为此,您需要了解类层次结构及其实现细节。
其他数据库很可能会有所不同。如果您的数据库是开源的,比如MySQL,您可以了解内部构造的详细信息并找到检索密码的方法。
答案 2 :(得分:0)
您可以解析连接池参数的服务器XML配置文件,并从那里获取密码。复杂的解决方案,但它的工作原理。