拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 不同数据库的JDBC URL格式

不同数据库的JDBC URL格式

白鹭 - 2021-11-24 758 0 0

1.概述

当我们使用Java处理数据库时,通常我们使用JDBC连接到数据库。

JDBC URL是在Java应用程序和数据库之间建立连接的重要参数。但是,对于不同的数据库系统,JDBC URL格式可以不同。

在本教程中,我们将仔细研究几种广泛使用的数据库的JDBC URL格式: OracleMySQLMicrosoft SQL ServerPostgreSQL

2. Oracle的JDBC URL格式

Oracle数据库系统广泛用于企业Java应用程序中。在查看用于连接Oracle数据库的JDBC URL格式之前,我们首先应确保Oracle Thin数据库驱动程序在我们的类路径中。

例如,如果我们的项目由Maven管理,则需要在pom.xml添加ojdbc14依赖项

<dependency>

 <groupId>com.oracle</groupId>

 <artifactId>ojdbc14</artifactId>

 <version>10.2.0.4.0</version>

 </dependency>

由于某些许可证问题,Maven Central存储库仅指向此工件的POM文件。因此,我们需要下载jar并将其手动安装到我们的Maven存储库中。

Thin驱动程序提供了几种JDBC URL格式:

接下来,我们将介绍每种格式。

2.1。连接到Oracle数据库SID

在某些旧版本的Oracle数据库中,该数据库被定义为SID。让我们看看用于连接到SID的JDBC URL格式:

jdbc:oracle:thin:[<user>/<password>]@<host>[:<port>]:<SID>

例如,假设我们有一个Oracle数据库服务器主机“ myoracle.db.server:1521 ”,并且SID的名称是“ my_sid ”,我们可以按照上面的格式来构建连接URL并连接到数据库:

@Test

 public void givenOracleSID_thenCreateConnectionObject() {

 String oracleJdbcUrl = "jdbc:oracle:thin:@myoracle.db.server:1521:my_sid";

 String username = "dbUser";

 String password = "1234567";

 try (Connection conn = DriverManager.getConnection(oracleJdbcUrl, username, password)) {

 assertNotNull(conn);

 } catch (SQLException e) {

 System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());

 }

 }

2.2。连接到Oracle数据库服务名称

通过服务名称连接Oracle数据库的JDBC URL格式与我们以前通过SID连接的格式非常相似:

jdbc:oracle:thin:[<user>/<password>]@//<host>[:<port>]/<service>

我们可以连接到Oracle数据库服务器“ myoracle.db.server:1521 ”上的服务“ my_servicename ”:

@Test

 public void givenOracleServiceName_thenCreateConnectionObject() {

 String oracleJdbcUrl = "jdbc:oracle:thin:@//myoracle.db.server:1521/my_servicename";

 ...

 try (Connection conn = DriverManager.getConnection(oracleJdbcUrl, username, password)) {

 assertNotNull(conn);

 ...

 }

 ...

 }

2.3。使用tnsnames.ora条目连接到Oracle数据库

我们还可以在JDBC URL中包含tnsnames.ora条目以连接到Oracle数据库:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVICE_NAME=<service>)))

让我们看看如何使用tnsnames.ora文件中的条目连接到“ my_servicename ”服务:

@Test

 public void givenOracleTnsnames_thenCreateConnectionObject() {

 String oracleJdbcUrl = "jdbc:oracle:thin:@" +

 "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +

 "(HOST=myoracle.db.server)(PORT=1521))" +

 "(CONNECT_DATA=(SERVICE_NAME=my_servicename)))";

 ...

 try (Connection conn = DriverManager.getConnection(oracleJdbcUrl, username, password)) {

 assertNotNull(conn);

 ...

 }

 ...

 }

3. MySQL的JDBC URL格式

在本节中,我们讨论如何编写JDBC URL以连接到MySQL数据库。

要从Java应用程序连接到MySQL数据库,首先让我们在pom.xml添加JDBC驱动程序mysql-connector-java依赖项

<dependency>

 <groupId>mysql</groupId>

 <artifactId>mysql-connector-java</artifactId>

 <version>8.0.22</version>

 </dependency>

接下来,让我们看一下MySQL JDBC驱动程序支持的连接URL的通用格式:

protocol//[hosts][/database][?properties]

让我们看一个在主机“ mysql.db.server ”上连接到MySQL数据库“ my_database ”的示例:

@Test

 public void givenMysqlDb_thenCreateConnectionObject() {

 String jdbcUrl = "jdbc:mysql://mysql.db.server:3306/my_database?useSSL=false&serverTimezone=UTC";

 String username = "dbUser";

 String password = "1234567";

 try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {

 assertNotNull(conn);

 } catch (SQLException e) {

 System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());

 }

 }

上面示例中的JDBC URL看起来很简单。它具有四个组成部分:

  • protocoljdbc:mysql:
  • hostmysql.db.server:3306
  • databasemy_database
  • propertiesuseSSL=false&serverTimezone=UTC

但是,有时,我们可能会遇到更复杂的情况,例如不同类型的连接或多个MySQL主机,等等。

接下来,我们将仔细研究每个构建基块。

3.1。协议

除了普通的“ jdbc:mysql: ”协议, connector-java JDBC驱动程序仍然支持某些特殊连接的协议:

当我们谈论负载平衡和JDBC复制时,我们可能会意识到应该有多个MySQL主机。

接下来,让我们检查连接URL另一部分的详细信息hosts

3.2 多域名

在上一节中,我们已经看到了定义单个主机的JDBC URL示例,例如mysql.db.server:3306.

但是,如果需要处理多个主机,则可以用逗号分隔的列表列出主机: host1, host2,…,hostN

我们也可以用方括号括[host1, host2,…,hostN]用逗号分隔的主机列表: [host1, host2,…,hostN]

让我们看几个连接到多个MySQL服务器的JDBC URL示例:

  • jdbc:mysql://myhost1:3306,myhost2:3307/db_name
  • jdbc:mysql://[myhost1:3306,myhost2:3307]/db_name
  • jdbc:mysql:loadbalance://myhost1:3306,myhost2:3307/db_name?user=dbUser&password=1234567&loadBalanceConnectionGroup=group_name&ha.enableJMX=true

如果我们仔细查看上面的最后一个示例,我们将看到在数据库名称之后,有一些属性和用户凭据的定义。接下来,我们将介绍这些。

3.3。属性和用户凭证

有效的全局属性将应用于所有主机。属性前面带有问号“ ?? ”,并写成key=value对,并用“ & ”**符号**分隔

jdbc:mysql://myhost1:3306/db_name?prop1=value1&prop2=value2

我们也可以将用户凭据放在属性列表中:

jdbc:mysql://myhost1:3306/db_name?user=root&password=mypass

同样,我们可以为每个主机添加用户凭据的前缀,格式为“ user:[email protected]

jdbc:mysql://root:[email protected]:3306/db_name

此外,如果我们的JDBC URL包含主机列表,并且所有主机都使用相同的用户凭据,则可以在主机列表前添加前缀

jdbc:mysql://root:mypass[myhost1:3306,myhost2:3307]/db_name

毕竟,也可以在JDBC URL之外提供用户凭证

当我们调用方法以获得连接时DriverManager.getConnection(String url, String user, String password)可以将用户名和密码传递给DriverManager.getConnection(String url, String user, String password)方法。

4. Microsoft SQL Server的JDBC URL格式

Microsoft SQL Server是另一种流行的数据库系统。要从Java应用程序连接MS SQL Server数据库,我们需要将mssql-jdbc依赖项添加到我们的pom.xml

<dependency>

 <groupId>com.microsoft.sqlserver</groupId>

 <artifactId>mssql-jdbc</artifactId>

 <version>8.4.1.jre11</version>

 </dependency>

接下来,让我们看看如何构建JDBC URL以获得与MS SQL Server的连接。

用于连接到MS SQL Server数据库的JDBC URL的一般格式为:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

让我们仔细看看格式的每个部分。

  • serverName –我们将连接到的服务器的地址;这可能是指向服务器的域名或IP地址
  • instanceName –要在serverName上连接的实例;这是一个可选字段,如果未指定该字段,则将选择默认实例
  • portNumber –这是要在serverName上连接的端口(默认端口为1433
  • properties –可以包含一个或多个可选的连接属性,必须用分号分隔,并且不允许重复的属性名称

现在,假设我们有一个在主机“ mssql.db.server ”上运行的MS SQL Server数据库,服务器上的instanceName是“ mssql_instance ”,而我们要连接的数据库的名称是“ my_database ”。

让我们尝试获得与此数据库的连接:

@Test

 public void givenMssqlDb_thenCreateConnectionObject() {

 String jdbcUrl = "jdbc:sqlserver://mssql.db.server\\mssql_instance;databaseName=my_database";

 String username = "dbUser";

 String password = "1234567";

 try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {

 assertNotNull(conn);

 } catch (SQLException e) {

 System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());

 }

 }

5. PostgreSQL的JDBC URL格式

PostgreSQL是一种流行的开源数据库系统。要使用PostgreSQL,应该在我们的pom.xml中将JDBC驱动程序postgresql添加为依赖项:

<dependency>

 <groupId>org.postgresql</groupId>

 <artifactId>postgresql</artifactId>

 <version>42.2.18</version>

 </dependency>

连接到PostgreSQL的JDBC URL的一般形式是:

jdbc:postgresql://host:port/database?properties

现在,让我们研究以上JDBC URL格式的每个部分。

host参数是数据库服务器的域名或IP地址。

如果要指定IPv6地址,则host参数必须用方括号括起来,例如jdbc:postgresql://[::1]:5740/my_database .mysql

port参数指定PostgreSQL正在监听的端口号。 port参数是可选的,默认端口号是5432

顾名思义, database参数定义了我们要连接的数据库的名称。

properties参数可以包含由“ & ”符号分隔的一组key=value对。

了解了JDBC URL格式的参数后,让我们看一下如何获取与PostgreSQL数据库的连接的示例:

@Test

 public void givenPostgreSqlDb_thenCreateConnectionObject() {

 String jdbcUrl = "jdbc:postgresql://postgresql.db.server:5430/my_database?ssl=true&loglevel=2";

 String username = "dbUser";

 String password = "1234567";

 try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {

 assertNotNull(conn);

 } catch (SQLException e) {

 System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());

 }

 }

在上面的示例中,我们使用以下命令连接到PostgreSQL数据库:

  • host:port – postgresql.db.server:5430
  • databasemy_database
  • 属性– ssl=true&loglevel=2

六,结论

本文讨论了四种广泛使用的数据库系统的JDBC URL格式:Oracle,MySQL,Microsoft SQL Server和PostgreSQL。

我们还看到了构建JDBC URL字符串以获得与这些数据库的连接的不同示例。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *