通过javaapi的java.sql.DatabaseMetaData可获得drivername、url、username,有没有办法获得connection或datasource的密码?

解决方案 »

  1.   

    在某些情况下,如果使用的是datasource,是可以得到这些信息的
    如取得tomcat下的datasource
    ctx=new InitialContext();
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/northwind");返回的DataSource ds实际上包含了所有定义的信息,dbcp连接池返回的DataSource实际类型是
    org.apache.commons.dbcp.BasicDataSource
    可将ds转换为org.apache.commons.dbcp.BasicDataSource取得连接的详细信息,如用户名,密码等,或者使用reflect
      

  2.   

    to cheng_young(古道西风瘦马) :
    参数就是一个已经得到的DataSource,你所说org.apache.commons.dbcp.BasicDataSource只是DataSource的一种,不行啊能否详细说说使用reflect获得此DataSource密码过程吗?再次鸣谢
      

  3.   

    reflect方法仍然依赖于具体的连接池实现,只是不用转换为具体的类而已,
    或者它根本没有提供得到相关参数的public方法,而是package或protected方法,
    只能使用reflect如org.apache.commons.dbcp.BasicDataSource的密码字段名称可能是password,
    但换一个连接池密码字段不一定是password(虽然可能性较大)可在调试时查看具体的字段名称