Java 中文官方教程 2022 版(三十四)(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Java 中文官方教程 2022 版(三十四)

Java 中文官方教程 2022 版(三十四)(1)https://developer.aliyun.com/article/1488026

下载示例代码

示例代码JDBCTutorial.zip包括以下文件:

  • properties
  • javadb-build-properties.xml
  • javadb-sample-properties.xml
  • mysql-build-properties.xml
  • mysql-sample-properties.xml
  • sql
  • javadb
  • create-procedures.sql
  • create-tables.sql
  • drop-tables.sql
  • populate-tables.sql
  • mysql
  • create-procedures.sql
  • create-tables.sql
  • drop-tables.sql
  • populate-tables.sql
  • src/com/oracle/tutorial/jdbc
  • CachedRowSetSample.java
  • CityFilter.java
  • ClobSample.java
  • CoffeesFrame.java
  • CoffeesTable.java
  • CoffeesTableModel.java
  • DatalinkSample.java
  • ExampleRowSetListener.java
  • FilteredRowSetSample.java
  • JdbcRowSetSample.java
  • JDBCTutorialUtilities.java
  • JoinSample.java
  • ProductInformationTable.java
  • RSSFeedsTable.java
  • StateFilter.java
  • StoredProcedureJavaDBSample.java
  • StoredProcedureMySQLSample.java
  • SuppliersTable.java
  • WebRowSetSample.java
  • txt
  • colombian-description.txt
  • xml
  • rss-coffee-industry-news.xml
  • rss-the-coffee-break-blog.xml
  • build.xml

创建一个目录来包含示例的所有文件。这些步骤将此目录称为 **。将 JDBCTutorial.zip 的内容解压缩到 ** 中。

修改 build.xml 文件

build.xml 文件是 Apache Ant 用于编译和执行 JDBC 示例的构建文件。文件 properties/javadb-build-properties.xmlproperties/mysql-build-properties.xml 包含 Java DB 和 MySQL 需要的额外 Apache Ant 属性。文件 properties/javadb-sample-properties.xmlproperties/mysql-sample-properties.xml 包含示例所需的属性。

修改这些 XML 文件如下:

修改 build.xml

build.xml 文件中,修改属性 ANTPROPERTIES,指向 properties/javadb-build-properties.xmlproperties/mysql-build-properties.xml,取决于您的 DBMS。例如,如果您正在使用 Java DB,则您的 build.xml 文件将包含以下内容:

<property
  name="ANTPROPERTIES"
  value="properties/javadb-build-properties.xml"/>
  <import file="${ANTPROPERTIES}"/>

同样,如果您正在使用 MySQL,您的 build.xml 文件将包含以下内容:

<property
  name="ANTPROPERTIES"
  value="properties/mysql-build-properties.xml"/>
  <import file="${ANTPROPERTIES}"/>

修改特定于数据库的属性文件

properties/javadb-build-properties.xmlproperties/mysql-build-properties.xml 文件(取决于您的 DBMS),根据以下表格中的描述修改以下属性:

属性 描述
JAVAC 您的 Java 编译器 javac 的完整路径名。
JAVA 您的 Java 运行时可执行文件 java 的完整路径名。
PROPERTIESFILE 属性文件的名称,可以是 properties/javadb-sample-properties.xmlproperties/mysql-sample-properties.xml
MYSQLDRIVER 你的 MySQL 驱动程序的完整路径名。对于 Connector/J,通常是 *<Connector/J 安装目录>*/mysql-connector-java-*版本号*.jar
JAVADBDRIVER 您的 Java DB 驱动程序的完整路径名。通常是 *<Java DB 安装目录>*/lib/derby.jar
XALANDIRECTORY 包含 Apache Xalan 的目录的完整路径名。
CLASSPATH JDBC 教程使用的类路径。您无需更改此值
XALAN 文件 xalan.jar 的完整路径名。
DB.VENDOR 一个值,可以是 derbymysql,取决于您是使用 Java DB 还是 MySQL。教程使用此值来构建连接到 DBMS 和识别特定于 DBMS 的代码和 SQL 语句所需的 URL。
DB.DRIVER JDBC 驱动程序的完全限定类名。对于 Java DB,这是 org.apache.derby.jdbc.EmbeddedDriver。对于 MySQL,这是 com.mysql.cj.jdbc.Driver
DB.HOST 托管您的 DBMS 的计算机的主机名。
DB.PORT 托管您的 DBMS 的计算机的端口号。
DB.SID 教程创建和使用的数据库名称。
DB.URL.NEWDATABASE 创建新数据库时用于连接到您的 DBMS 的连接 URL。您无需更改此值
DB.URL 用于连接到您的 DBMS 的连接 URL。您无需更改此值
DB.USER 具有在 DBMS 中创建数据库权限的用户的名称。
DB.PASSWORD 指定在DB.USER中的用户的密码。
DB.DELIMITER 用于分隔 SQL 语句的字符。不要更改此值。它应该是分号字符(;)。

修改教程属性文件

教程示例使用properties/javadb-sample-properties.xml文件或properties/mysql-sample-properties.xml文件中的值(取决于您的 DBMS)来连接到 DBMS 并初始化数据库和表,如下表所述:

属性 描述
dbms 取值为derbymysql,取决于您是使用 Java DB 还是 MySQL。本教程使用此值来构建连接到 DBMS 所需的 URL,并识别 DBMS 特定的代码和 SQL 语句。
jar_file 包含本教程所有类文件的 JAR 文件的完整路径名。
driver JDBC 驱动程序的完全限定类名。对于 Java DB,这是org.apache.derby.jdbc.EmbeddedDriver。对于 MySQL,这是com.mysql.cj.jdbc.Driver
database_name 教程创建和使用的数据库名称。
user_name 具有在 DBMS 中创建数据库权限的用户的名称。
password 指定在user_name中的用户的密码。
server_name 托管您的 DBMS 的计算机的主机名。
port_number 托管您的 DBMS 的计算机的端口号。

注意:为了简化演示 JDBC API,JDBC 教程示例代码不执行部署系统通常使用的密码管理技术。在生产环境中,您可以遵循 Oracle 数据库密码管理指南并禁用任何示例帐户。请参阅Oracle 数据库安全指南中的应用程序设计中的密码保护部分,了解密码管理指南和其他安全建议。

编译并打包示例

在命令提示符下,将当前目录更改为**。从该目录运行以下命令编译示例并将其打包到一个 jar 文件中:

ant jar

创建数据库、表格,并填充表格

如果您使用的是 MySQL,则运行以下命令来创建数据库:

ant create-mysql-database

注意build.xml文件中不存在用于为 Java DB 创建数据库的相应 Ant 目标。用于建立数据库连接的 Java DB 数据库 URL 包括创建数据库的选项(如果尚不存在)。有关更多信息,请参阅建立连接。

如果您正在使用 Java DB 或 MySQL,则可以从同一目录运行以下命令来删除现有的示例数据库表,重新创建表并填充它们。对于 Java DB,此命令还会在数据库不存在时创建数据库:

ant setup

注意:在运行示例中的 Java 类之前,您应该每次运行ant setup命令。这些示例中的许多示例都期望示例数据库表的内容中有特定的数据。

运行示例

build.xml文件中的每个目标对应于 JDBC 示例中的一个 Java 类或 SQL 脚本。以下表列出了build.xml文件中的目标,每个目标执行的类或脚本,以及每个目标需要的其他类或文件:

Ant 目标 类或 SQL 脚本 其他必需类或文件
javadb-create-procedure javadb/create-procedures.sql;查看build.xml文件以查看运行的其他 SQL 语句 无其他必需文件
mysql-create-procedure mysql/create-procedures.sql 无其他必需文件
run JDBCTutorialUtilities 无其他必需类
runct CoffeesTable JDBCTutorialUtilities
runst SuppliersTable JDBCTutorialUtilities
runjrs JdbcRowSetSample JDBCTutorialUtilities
runcrs CachedRowSetSampleExampleRowSetListener JDBCTutorialUtilities
runjoin JoinSample JDBCTutorialUtilities
runfrs FilteredRowSetSample JDBCTutorialUtilitiesCityFilterStateFilter
runwrs WebRowSetSample JDBCTutorialUtilities
runclob ClobSample JDBCTutorialUtilitiestxt/colombian-description.txt
runrss RSSFeedsTable JDBCTutorialUtilitiesxml目录中包含的 XML 文件
rundl DatalinkSample JDBCTutorialUtilities
runspjavadb StoredProcedureJavaDBSample JDBCTutorialUtilitiesSuppliersTableCoffeesTable
runspmysql StoredProcedureMySQLSample JDBCTutorialUtilitiesSuppliersTableCoffeesTable
runframe CoffeesFrame JDBCTutorialUtilitiesCoffeesTableModel

例如,要运行CoffeesTable类,请将当前目录更改为**,然后从该目录运行以下命令:

ant runct

使用 JDBC 处理 SQL 语句

原文:docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

一般来说,要使用 JDBC 处理任何 SQL 语句,您需要按照以下步骤进行:

  1. 建立连接。
  2. 创建语句。
  3. 执行查询。
  4. 处理ResultSet对象。
  5. 关闭连接。

本页使用教程示例中的方法CoffeesTable.viewTable来演示这些步骤。此方法输出表COFFEES的内容。此方法将在本教程的后续部分中更详细地讨论:

public static void viewTable(Connection con) throws SQLException {
    String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
    try (Statement stmt = con.createStatement()) {
      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID + ", " + price +
                           ", " + sales + ", " + total);
      }
    } catch (SQLException e) {
      JDBCTutorialUtilities.printSQLException(e);
    }
  }

建立连接

首先,与要使用的数据源建立连接。数据源可以是 DBMS、传统文件系统或具有相应 JDBC 驱动程序的其他数据源。此连接由Connection对象表示。有关更多信息,请参见建立连接。

创建语句

Statement是表示 SQL 语句的接口。您执行Statement对象,它们生成ResultSet对象,这是表示数据库结果集的数据表。您需要一个Connection对象来创建Statement对象。

例如,CoffeesTable.viewTable使用以下代码创建了一个Statement对象:

stmt = con.createStatement();

有三种不同类型的语句:

  • Statement:用于执行没有参数的简单 SQL 语句。
  • PreparedStatement:(扩展Statement。)用于预编译可能包含输入参数的 SQL 语句。有关更多信息,请参见使用预编译语句。
  • CallableStatement:(扩展PreparedStatement。)用于执行可能包含输入和输出参数的存储过程。有关更多信息,请参见存储过程。

执行查询

要执行查询,请调用Statement中的execute方法,如下所示:

  • execute:如果查询返回的第一个对象是ResultSet对象,则返回true。如果查询可能返回一个或多个ResultSet对象,请使用此方法。通过反复调用Statement.getResultSet检索查询返回的ResultSet对象。
  • executeQuery:返回一个ResultSet对象。
  • executeUpdate:返回一个整数,表示受 SQL 语句影响的行数。如果您使用INSERTDELETEUPDATE SQL 语句,请使用此方法。

例如,CoffeesTable.viewTable使用以下代码执行了一个Statement对象:

ResultSet rs = stmt.executeQuery(query);

有关更多信息,请参见从结果集中检索和修改值。

处理 ResultSet 对象

通过游标访问ResultSet对象中的数据。请注意,此游标不是数据库游标。这个游标是指向ResultSet对象中一行数据的指针。最初,游标位于第一行之前。您调用ResultSet对象中定义的各种方法来移动游标。

例如,CoffeesTable.viewTable重复调用ResultSet.next方法来将游标向前移动一行。每次调用next时,该方法会输出游标当前位置的行中的数据:

ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID + ", " + price +
                           ", " + sales + ", " + total);
      }
      // ...

查看从结果集中检索和修改值获取更多信息。

关闭连接

当您使用完ConnectionStatementResultSet对象后,请调用其close方法立即释放它正在使用的资源。

或者,可以使用try-with-resources 语句自动关闭ConnectionStatementResultSet对象,无论是否抛出SQLException。(当 JDBC 在与数据源交互时遇到错误时,会抛出SQLException。查看处理 SQL 异常获取更多信息。)自动资源语句由一个try语句和一个或多个声明的资源组成。例如,CoffeesTable.viewTable方法会自动关闭其Statement对象,如下所示:

public static void viewTable(Connection con) throws SQLException {
    String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
    try (Statement stmt = con.createStatement()) {
      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID + ", " + price +
                           ", " + sales + ", " + total);
      }
    } catch (SQLException e) {
      JDBCTutorialUtilities.printSQLException(e);
    }
  }

以下语句是一个try-with-resources 语句,声明了一个资源stmt,当try块终止时将自动关闭该资源:

try (Statement stmt = con.createStatement()) {
      // ...
    }

查看 try-with-resources 语句在 Essential Classes 教程中获取更多信息。

建立连接

原文:docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html

首先,您需要与要使用的数据源建立连接。数据源可以是 DBMS、传统文件系统或其他具有相应 JDBC 驱动程序的数据源。通常,JDBC 应用程序使用以下两个类之一连接到目标数据源:

  • DriverManager:此完全实现的类将应用程序连接到由数据库 URL 指定的数据源。当此类首次尝试建立连接时,它会自动加载类路径中找到的任何 JDBC 4.0 驱动程序。请注意,您的应用程序必须在版本 4.0 之前手动加载任何 JDBC 驱动程序。
  • DataSource:此接口优先于DriverManager,因为它允许底层数据源的详细信息对您的应用程序透明。设置DataSource对象的属性,使其表示特定的数据源。有关更多信息,请参阅使用 DataSource 对象进行连接。有关使用DataSource类开发应用程序的更多信息,请参阅最新版本的*Java EE 教程*。

注意:本教程中的示例使用DriverManager类而不是DataSource类,因为它更容易使用,而且示例不需要DataSource类的功能。

本页涵盖以下主题:

  • 使用 DriverManager 类
  • 指定数据库连接 URL

使用 DriverManager 类

使用DriverManager类连接到您的 DBMS 涉及调用方法DriverManager.getConnection。以下方法,JDBCTutorialUtilities.getConnection,建立数据库连接:

public Connection getConnection() throws SQLException {
    Connection conn = null;
    Properties connectionProps = new Properties();
    connectionProps.put("user", this.userName);
    connectionProps.put("password", this.password);
    if (this.dbms.equals("mysql")) {
        conn = DriverManager.getConnection(
                   "jdbc:" + this.dbms + "://" +
                   this.serverName +
                   ":" + this.portNumber + "/",
                   connectionProps);
    } else if (this.dbms.equals("derby")) {
        conn = DriverManager.getConnection(
                   "jdbc:" + this.dbms + ":" +
                   this.dbName +
                   ";create=true",
                   connectionProps);
    }
    System.out.println("Connected to database");
    return conn;
}

方法DriverManager.getConnection建立数据库连接。此方法需要数据库 URL,具体取决于您的 DBMS。以下是一些数据库 URL 的示例:

  1. MySQL:jdbc:mysql://localhost:3306/,其中localhost是托管数据库的服务器名称,3306是端口号
  2. Java DB:jdbc:derby:*testdb*;create=true,其中*testdb*是要连接的数据库的名称,create=true指示 DBMS 创建数据库。
    注意:此 URL 与 Java DB 嵌入式驱动程序建立数据库连接。Java DB 还包括使用不同 URL 的网络客户端驱动程序。

此方法使用Properties对象指定访问 DBMS 所需的用户名和密码。

注意

  • 通常,在数据库 URL 中,你还会指定要连接的现有数据库的名称。例如,URL jdbc:mysql://localhost:3306/mysql 代表了名为 mysql 的 MySQL 数据库的数据库 URL。本教程中的示例使用不指定特定数据库的 URL,因为示例会创建一个新数据库。
  • 在以前的 JDBC 版本中,要获取连接,你首先需要通过调用方法 Class.forName 来初始化你的 JDBC 驱动程序。这些方法需要一个类型为 java.sql.Driver 的对象。每个 JDBC 驱动程序都包含一个或多个实现接口 java.sql.Driver 的类。Java DB 的驱动程序是 org.apache.derby.jdbc.EmbeddedDriverorg.apache.derby.jdbc.ClientDriver,而 MySQL Connector/J 的驱动程序是 com.mysql.cj.jdbc.Driver。查看你的 DBMS 驱动程序的文档以获取实现接口 java.sql.Driver 的类名。
    任何在你的类路径中找到的 JDBC 4.0 驱动程序都会自动加载。(但是,在 JDBC 4.0 之前,你必须手动加载任何驱动程序,使用方法 Class.forName。)

该方法返回一个 Connection 对象,表示与 DBMS 或特定数据库的连接。通过这个对象查询数据库。

指定数据库连接 URL

数据库连接 URL 是你的 DBMS JDBC 驱动程序用来连接数据库的字符串。它可以包含诸如在哪里搜索数据库、要连接的数据库名称和配置属性等信息。数据库连接 URL 的确切语法由你的 DBMS 指定。

Java DB 数据库连接 URL

以下是 Java DB 的数据库连接 URL 语法:

jdbc:derby:[*subsubprotocol*:][*databaseName*][;*attribute*=*value*]*
  • *subsubprotocol* 指定 Java DB 应在何处搜索数据库,可以是目录、内存、类路径或 JAR 文件。通常会省略。
  • *databaseName* 是要连接的数据库的名称。
  • *attribute*=*value*表示一个可选的、以分号分隔的属性列表。这些属性使你能够指示 Java DB 执行各种任务,包括以下内容:
  • 创建连接 URL 中指定的数据库。
  • 加密连接 URL 中指定的数据库。
  • 指定存储日志和跟踪信息的目录。
  • 指定用户名和密码以连接到数据库。

查看Java DB 技术文档中的Java DB 开发人员指南Java DB 参考手册以获取更多信息。

MySQL Connector/J 数据库 URL

以下是 MySQL Connector/J 的数据库连接 URL 语法:

jdbc:mysql://[*host*][,*failoverhost*...]
    [:*port*]/[*database*]
    [?*propertyName1*][=*propertyValue1*]
    [&*propertyName2*][=*propertyValue2*]...
  • *host*:*port* 是托管数据库的计算机的主机名和端口号。如果未指定,默认值为 *host**port* 分别为 127.0.0.1 和 3306。
  • *database* 是要连接的数据库的名称。如果未指定,将连接到没有默认数据库的连接。
  • *failover* 是一个备用数据库的名称(MySQL Connector/J 支持故障转移)。
  • *propertyName*=*propertyValue* 表示一个可选的、以&符号分隔的属性列表。这些属性使您能够指示 MySQL Connector/J 执行各种任务。

查看MySQL 参考手册 获取更多信息。

Java 中文官方教程 2022 版(三十四)(3)https://developer.aliyun.com/article/1488032

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
3天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
17天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
95 26
|
24天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
24天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
33 2
|
23天前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
42 0
|
1月前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
1月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编