0

正如 oracle 文档中所提到的,数据库 url 需要在 DriverManager.getConnection() 函数中采用“jdbc:subprotocol:subname:”格式。第一个也是最明显的问题是为什么不采用这种简单的方式,例如“C: \myDatabase.db”?

4

3 回答 3

1

Java 与操作系统无关,诸如“C:\myDatabase.db”之类的格式是操作系统特定的。例如,它无法连接到在 Solaris 上运行的 Oralce DBMS。他们还试图使其独立于 DBMS。并非所有 DBMS 系统都使用与 MySQL 等系统相同的数据库/表组织。考虑到试图解决的问题的复杂性,他们的解决方案实际上相当简单。

于 2013-09-26T19:41:12.803 回答
1

如果您拆分 URL 中的每个组件,您就可以理解我们为什么需要这种格式的组件。

  1. 有许多数据库,每个数据库都有自己专有的信息存储方式。只有特定的驱动程序才能理解和解释该专有信息。所以,我们需要子协议是oracle/mysql/etc。
  2. 可能有一些类型的驱动程序仅适用于 oracle。请检查http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html,您可以在其中将 Thin/oci/etc 放入子名称中。
  3. 正如 Sotirios 所提到的,如果数据库不在您的 C:\ 中并且在其他人的服务器中 - 所以我们需要一个主机,它自然也需要一个端口。
  4. 即使在该服务器中,同一端口,一个数据库“服务器”也可以为多个数据库(或服务)提供服务。因此,我们还需要 URL 中的数据库名称。
于 2013-09-26T19:41:48.143 回答
1

JDBC-Url 是一个统一资源标识符的 URL。这意味着必须遵循语法。您也可以重写C:\myDatabase.db为 URI file:/c:/myDatabase.db

其实对于 Windows-Explorer 的展位都是一样的,只是一个 webbrowser 只能理解 URL-form。

返回 URL:url 遵循语法。第一部分是协议 ( file),这将:与 protocoll 特定部分分开。

对于file-URIs,这将是一个以根目录开头的路径,/后跟由分隔的文件夹/

对于 JDBC-Urls,唯一共同的部分是 scheme ( jdbc) 和 separator :

在您的示例中,您使用本地文件。但是您将如何指定在另一台服务器上运行的数据库?您将不得不创建另一种方式。所以你可以这样开始:

  • jdbc:架构

  • mydatabasesystem:这可能会说“这是 'ydatabbasesystem' 的 JDBC-Url,我知道以下语法。

  • localfile:我将使用本地文件,以下部分是 localfiles 的语法

  • /c:/myDatabase.db有我的档案

这将导致一个 jdbc-Url:

jdbc:mydatabasesystem:localfile:/c:/myDatabase.db

映像您的数据库可能是通过网络连接的。这可以这样写:

jdbc:mydatabasesystem:remoteserver:servername?username=user&password=secret

你看,如果你写一个通用的方法来连接不同厂商的数据库,你将不得不创建一个通用的 wy 来连接数据库。这将导致类似于 JDBC-url 的东西。

于 2013-09-26T20:12:44.013 回答