本教程适用于 JDK 8。本页中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
有关 Java SE 9 及后续版本中更新的语言功能的摘要,请参阅Java 语言更改。
有关所有 JDK 发行版的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK 发行说明。
这个教程附带的示例代码创建了一个数据库,供一个名为The Coffee Break的小咖啡馆所有者使用,咖啡豆按磅销售,冲泡咖啡按杯销售。
以下步骤配置了一个JDBC开发环境,您可以使用该环境编译和运行教程示例:
build.xml
文件在计算机上安装最新版本的Java SE SDK。
确保Java SE SDK的完整目录路径下的bin
目录在您的PATH
环境变量中,以便您可以从任何目录运行Java编译器和Java应用程序启动器。
此教程已经针对以下DBMS进行了测试:
注意:最近版本的JDK不再包含Java DB。Java DB是Apache Derby的重新品牌。如果您想使用Java DB,请从Apache DB项目下载最新版本。
请注意,如果您使用其他DBMS,可能需要修改教程示例的代码。
如果您使用Java DB,则已经带有JDBC驱动程序。如果您使用MySQL,请安装最新版本的MySQL JDBC驱动程序Connector/J。
联系您的数据库供应商以获取适用于您的DBMS的JDBC驱动程序。
JDBC驱动程序有许多可能的实现。这些实现被归类如下:
类型1:将JDBC API实现为与其他数据访问API(如ODBC)的映射。这种类型的驱动程序通常依赖于本地库,限制了它们的可移植性。JDBC-ODBC桥是类型1驱动程序的一个示例。
注意:JDBC-ODBC桥应被视为一个过渡性解决方案。Oracle不支持该桥。仅在您的数据库管理系统不提供仅限于Java的JDBC驱动程序时考虑使用。
类型2:部分使用Java编程语言,部分使用本机代码编写的驱动程序。这些驱动程序使用特定于其连接的数据源的本机客户端库。同样,由于本机代码,它们的可移植性有限。Oracle的OCI(Oracle Call Interface)客户端驱动程序是类型2驱动程序的一个示例。
类型3:使用纯Java客户端,并使用数据库无关协议与中间件服务器通信的驱动程序。然后,中间件服务器将客户端的请求传递给数据源。
类型4:纯Java驱动程序,实现特定数据源的网络协议。客户端直接连接到数据源。
检查您的数据库管理系统提供哪些驱动程序类型。Java DB提供两种类型4驱动程序,即嵌入式驱动程序和网络客户端驱动程序。MySQL Connector/J是一种类型4驱动程序。
安装JDBC驱动程序通常包括将驱动程序复制到计算机上,然后将其位置添加到类路径中。此外,除了类型4驱动程序之外的许多JDBC驱动程序还要求您安装客户端API。通常不需要其他特殊配置。
这些步骤使用Apache Ant,一个基于Java的工具,构建、编译和运行JDBC教程示例。请转到以下链接下载Apache Ant:
确保Apache Ant可执行文件在您的PATH
环境变量中,以便您可以从任何目录运行它。
如果您的数据库管理系统是Java DB,则RSSFeedsTable.java
示例(在使用SQLXML对象中描述)需要Apache Xalan。该示例使用Apache Xalan-Java。请转到以下链接下载:
https://xml.apache.org/xalan-j/
示例代码JDBCTutorial.zip
包括以下文件:
属性
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
创建一个目录来存放所有示例文件。这些步骤将使用<JDBC教程目录>
来引用此目录。将JDBCTutorial.zip
文件解压缩到<JDBC教程目录>
。
build.xml
文件是Apache Ant用于编译和执行JDBC示例的构建文件。文件properties/javadb-build-properties.xml
和properties/mysql-build-properties.xml
包含Java DB和MySQL所需的额外的Apache Ant属性。文件properties/javadb-sample-properties.xml
和properties/mysql-sample-properties.xml
包含示例所需的属性。
按照以下方式修改这些XML文件:
在build.xml
文件中,将属性ANTPROPERTIES
修改为properties/javadb-build-properties.xml
或properties/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.xml
或 properties/mysql-build-properties.xml
文件中(取决于你的DBMS),根据下表所述修改以下属性:
属性 | 描述 |
---|---|
JAVAC |
您的Java编译器的完整路径名,javac |
JAVA |
您的Java运行时可执行文件的完整路径名,java |
PROPERTIESFILE |
属性文件的名称,可以是properties/javadb-sample-properties.xml 或properties/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 |
取决于您使用的是Java DB还是MySQL的值,可以是derby 或mysql 。教程使用此值来构建连接到DBMS所需的URL,并标识特定于DBMS的代码和SQL语句。 |
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 |
根据您使用的是Java DB还是MySQL,其值为derby 或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 Database Security Guide中的应用程序设计中的密码安全一节。
在命令提示符下,将当前目录更改为<JDBC教程目录>
。从该目录运行以下命令来编译示例并将其打包到一个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 |
CachedRowSetSample ,ExampleRowSetListener |
JDBCTutorialUtilities |
runjoin |
JoinSample |
JDBCTutorialUtilities |
runfrs |
FilteredRowSetSample |
JDBCTutorialUtilities ,CityFilter ,StateFilter |
runwrs |
WebRowSetSample |
JDBCTutorialUtilities |
runclob |
ClobSample |
JDBCTutorialUtilities ,txt/colombian-description.txt |
runrss |
RSSFeedsTable |
JDBCTutorialUtilities ,xml 目录中的XML文件 |
rundl |
DatalinkSample |
JDBCTutorialUtilities |
runspjavadb |
StoredProcedureJavaDBSample |
JDBCTutorialUtilities ,SuppliersTable ,CoffeesTable |
runspmysql |
StoredProcedureMySQLSample |
JDBCTutorialUtilities ,SuppliersTable ,CoffeesTable |
runframe |
CoffeesFrame |
JDBCTutorialUtilities ,CoffeesTableModel |
例如,要运行类CoffeesTable
,请将当前目录更改为<JDBC教程目录>
,然后从该目录中运行以下命令:
ant runct