【问题标题】:how to establish a database connection with an .xml file using JDBC Java如何使用 JDBC Java 与 .xml 文件建立数据库连接
【发布时间】:2020-02-27 14:42:24
【问题描述】:

如标题所示,我的数据库的连接信息位于 .xml 文件中。这里是这个文件的完整代码:

<?xml version="1.0" encoding="UTF-8"?>

-<context>

<Resource url="jdbc:sqlserver://LAPTOP..;database=test" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" password="cgy55wH-..." username="sa" nomBDD="test" typeConn="SQL Server"/>

<Chemin fileSauve="truc\Export\" file="truc\Export\"/>

</context>

我不知道如何从我的 java 代码中检索信息。 (使用 JDBC) 作为第一步,我开始开发一个可以让我确认文件存在的功能。

这里是部分代码:

    public String searchFile() throws Exception {
        String retour = "ko";
        File fichier;
        for (File lment : File.listRoots()) {
            fichier = new File(lment + "\\XFiles\\Conf\\init.xml");
            if (fichier.exists()) {
                cheminFichier=lment+"\\XFiles\\Conf\\init.xml";
                retour = "ok";
            }
        }
        return retour;
    }

我愿意接受任何能让我理解和解决这个问题的建议或想法。

【问题讨论】:

  • 解析 xml(那里有很多库) - 存储数据库连接所需的值,并使用它们打开 jdbc 连接
  • 好吧,我明白了,我可以使用 XPath 之类的库(来定位 xml),然后:String url = (String) xpath.compile("//config//jdbc//url").evaluate(document, XPathConstants.STRING); 类似的东西?
  • 只是检索密码、网址等。然后我将它们与:conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName="+database+";integratedSecurity=true;",user,password); //récupérer les informations de la connexion (serveur, BDD...)

标签: java xml jdbc


【解决方案1】:

Java 命名和目录接口 (JNDI)

您的 XML 看起来像来自 web container 的定义文件,例如 Apache Tomcat

如果是这样,您应该使用 Java 内置的 Java Naming and Directory Interface (JNDI) API 来间接访问信息。

有些人将数据库信息加载到LDAP 服务器或类似的directory service 中,可通过JNDI 从您的Java 代码访问。

Tomcat 和类似的web containers 捆绑了它们自己的目录服务,您的Java 代码可以通过JNDI 访问它们。这里的关键思想是没有hard-coding 在部署时更改的细节。您的 Web 应用程序代码不应该知道任何有关您的特定 Web 容器的信息,您的 Web 应用程序也不应该知道任何有关其配置文件的信息。 JNDI 是您的 Web 应用程序和运行时部署细节之间的中间人。因此,当数据库密码更改时,您无需重新编译您的 Web 应用程序。例如,当您或您的管理员从 Tomcat 更改为 Payara 时,您无需重新编译您的 Web 应用程序。

因此您不会在代码中直接打开 XML 文件。读取和解析 XML 文件是 Web 容器的工作。

您将要求 JNDI 服务为您提供 DataSource 对象。从该数据源调用getConnection 以连接到数据库。这将所有配置信息责任交到系统管理员手中。作为程序员,配置对您来说是透明的。

关于在你的 XML 配置文件的 Resource 标签中加密密码:你没有。如果您在网络上搜索,您会发现一些文章解释了您对保护的追求必须结束。如果你在那里加密密码,你必须在某个地方仍然有一个解密密钥。因此,您必须通过加密来保护该解密密钥,这意味着您需要保护 那个 第二个密钥。等等,turtles all the way down。在某些时候,您必须拥有一个值得信赖的锁定系统。

搜索 Stack Overflow 以了解更多信息,因为这已被多次介绍。姊妹站点 Server Fault Stack Exchange 也可能有信息。

【讨论】:

  • 您好,谢谢您或此解决方案。我不知道这项技术,我会使用它。目前,我有一个加密密码,并且我使用了一个允许我解密它的函数。是否还有一个选项可以在 getConnection 之前获取此密码?
  • 例如,当我写这行代码时(如你所说,它将所有需要的配置放入连接中):DataSource datasource = (DataSource) context.lookup("...."); 我应该在查找中写入什么。我的 .xml 文件没有名称。
  • @harili 所有这些细节都已在 Stack Overflow 上多次介绍过,包括我关于 Tomcat 的帖子。阅读 Oracle 的JNDI tutorial。并阅读您的特定 Web 容器的文档。将所有部件都安装到位可能有点棘手。但值得付出努力,这样您就可以将应用程序代码和部署配置分开。提示:学习在 DuckDuckGo/Bing/Google 中使用 site:stackoverflow.com blah blah 搜索词。 Stack Overflow 搜索偏向于问答。
  • @harili RE:加密,请参阅我对答案的编辑。
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多