使用JDBC将数据抽取到XML中

news/2024/5/18 16:15:23 标签: jdbc, xml, 数据库, 数据库驱动程序, api, string
什么是 JDBC?第 1 页(共7 页)



如果您已经阅读了“使用 JDBC 将 XML 中的数据插入到数据库”教程,就可以跳到 SELECT 语句剖析。)

在不久以前,为了与数据库交互,开发人员必须使用那个数据库的特定 API。这意味着创建一个独立于数据库的应用程序十分困难(如果可能的话)。

JDBC 与 ODBC(或“开放数据库连接”)类似:它提供一个标准的 API 中间层以访问数据库。正如您在左边所看到的,可以使用标准的 JDBC 命令,JDBC 驱动程序将它们转换成数据库自身的 API。

本教程中从没有提及某一特定数据库,因为选择哪一数据库在很大程度上是没有关系的。所有命令都是标准的 JDBC 命令,它们由驱动程序转换成您选择的任一数据库自身的命令。由于这种 API 的独立性,您可以轻松地使用另一个数据库,而不必更改您应用程序中除驱动程序名和可能的连接 URL(在创建连接时将使用)之外的任何东西。

有关下载适合于您的数据库的 JDBC 驱动程序的信息,请参阅参考资料。有超过 150 个 JDBC 驱动程序可以使用,几乎覆盖了每一种数据库

甚至没有可用的 JDBC 驱动程序的数据库也可以选择。

JBDC-ODBC 桥第 2 页(共7 页)


只要有了 ODBC 驱动程序,数据库就不必有特定的 JDBC 驱动程序;可以使用 JDBC-ODBC 来替代。应用程序调用桥,桥将命令转换成 ODBC,然后 ODBC 驱动程序再将它们转换成数据库自身的 API。

JDBC-ODBC 桥不是推荐的访问数据库的方式,这涉及到性能和配置两方面原因 ― 命令必须通过两个 API,并且必须在每台客户机上安装和配置 ODBC 驱动程序 ― 但是如果没有纯 JDBC 驱动程序,也可以用它进行测试和开发。

如果选择使用桥,则通过选择 Start>Settings>Control Panel>ODBC Data Sources 来在 Windows 系统上创建一个“系统数据源名称(System Data Source Name (DSN))”。请记下 DSN 名称,因为您将在创建连接时用到它。

设置数据库和驱动程序第 3 页(共7 页)


首先,确保安装和运行了您选择的任一数据库,并且驱动程序可用。可以从 http://industry.java.sun.com/products/jdbc/drivers 下载 JDBC 驱动程序。

一旦创建了数据库,则创建必要的表。本教程只使用一个表 products。它的结构如左边所示。使用适合于您的数据库的步骤来创建表。

请注意:在通常情况下,应该至少在两个相关的表中表示这个数据;但为简单性起见,本示例只使用一个表。

 


访问数据库的过程第 4 页(共7 页)

使用 Java 语言与数据库交互通常由以下几步组成:

  1. 装入数据库驱动程序。这可以是一个 JDBC 驱动程序或 JDBC-ODBC 桥。
  2. 创建至数据库Connection
  3. 创建一个 Statement 对象。该对象实际执行 SQL 或存储过程。
  4. 创建一个 ResultSet,然后用执行查询的结果填充(如果目标是检索或直接更新数据)。
  5. ResultSet 检索或更新数据

作为“JavaTM 2 SDK 标准版”发行的一部分,java.sql 包包含用于访问数据库的“JDBC 2.0 核心 API”。作为“Java 2 SDK 企业版”一部分发行的 javax.sql 包包含“JDBC 2.0 可选包 API”。

本教程仅使用“JDBC 2.0 核心 API”中的类。

实例化驱动程序第 5 页(共7 页)


要访问数据库,首先装入 JDBC 驱动程序。在任何给定的时间都可以使用一些不同的驱动程序;由 DriverManager 通过尝试创建与每个所知的驱动程序的连接来确定要使用哪一个。应用程序将使用第一个成功连接的驱动程序。DriverManager 有两种方法可以知道驱动程序是否存在。

第一种方法是使用 Class.forName() 直接装入它,如本示例中所示。当装入驱动程序类时,它向 DriverManager 注册,如下所示:

public class Pricing extends Object {
   public static void main (String args[]){
      //For the JDBC-ODBC bridge, use
      //driverName = "sun.jdbc.odbc.JdbcOdbcDriver"
      String driverName = "JData2_0.sql.$Driver";
      try {
         Class.forName(driverName);
      } catch (ClassNotFoundException e) {
         System.out.println("Error creating class: "+e.getMessage());
      }
   }
}

成功装入驱动程序之后,应用程序可以连接到数据库

DriverManager 可以找到驱动程序的第二种方法是对在 sql.drivers 系统特性表中发现的任何驱动程序进行循环。sql.drivers 特性表是由一个冒号分开的潜在驱动程序列表。在动态装入类之前总是先检查该列表,因此如果要使用特定驱动程序,请确保 sql.drivers 特性表或者为空或者以您期望的驱动程序开始。

创建连接第 6 页(共7 页)


成功装入驱动程序之后,应用程序可以连接到数据库

DriverManager 通过静态 getConnection() 方法进行连接,该方法以数据库的 URL 作为自变量。URL 通常被引用为:

jdbc:<sub-protocol>:databasename

然而,还可以用活动驱动程序理解的任何格式编写引用 URL。有关 URL 的格式,请参考您的 JDBC 驱动程序文档。

涉及到子协议的一种情况是通过 ODBC 连接。如果直接通过 ODBC 访问 DSN 为 pricing 的样本数据库,则 URL 可能是:

odbc:pricing

这意味着要通过 JDBC 连接,URL 可能是:

jdbc:odbc:pricing

下面创建了实际的连接:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Pricing extends Object {
   public static void main (String args[]){
      //For the JDBC-ODBC bridge, use
      //driverName = "sun.jdbc.odbc.JdbcOdbcDriver"
      //and
      //connectURL = "jdbc:odbc:pricing"
      String driverName = "JData2_0.sql.$Driver";
      String connectURL = "jdbc:JDataConnect://127.0.0.1/pricing";
      Connection db = null;	   
      try {
         Class.forName(driverName);
         db = DriverManager.getConnection(connectURL);
      } catch (ClassNotFoundException e) {
         System.out.println("Error creating class: "+e.getMessage());
      } catch (SQLException e) {
         System.out.println("Error creating connection: "+e.getMessage());
      }
   }
}

一旦成功创建了连接,就可以执行任何需要的数据库操作(例如,插入或更新数据)。


 


关闭连接第 7 页(共7 页)

因为 StatementConnection 是对象,所以 Java 将对它们进行垃圾收集处理,释放它们占用的数据库资源。这可能会使您误认为无需去关闭这些对象,但实际不是这样。

Java 应用程序本身拥有大量可用资源是完全有可能的,这意味着很少进行垃圾收集。还有一种可能,虽然 Java 应用程序拥有大量资源,但可用的数据库资源却是有限的。很多数据库资源都可能由 Java 对象占用,而应用程序是本可以轻易关闭这些对象的。

不管是否有错误,确保关闭这些对象很重要,因此要向已有的 try-catch 块添加一个 finally 块:

...
      Connection db = null;	  
      try {
         Class.forName(driverName);
         db = DriverManager.getConnection(connectURL);
      } catch (ClassNotFoundException e) {
         System.out.println("Error creating class: "+e.getMessage());
      } catch (SQLException e) {
         System.out.println("Error creating connection: "+e.getMessage());
      } finally {
         System.out.println("Closing connections...");
         try {
            db.close();
         } catch (SQLException e) {
            System.out.println("Can't close connection.");
         }
      }
   }
}

令人啼笑皆非的是,close() 方法本身可以抛出一个 SQLException,因此它需要自己的 try-catch 块。


 

 


http://www.niftyadmin.cn/n/1608159.html

相关文章

Android 模拟器中sd卡的创建和文件的上传

转自这里 启动模拟器&#xff0c;里面启动浏览器&#xff0c;下载个文件&#xff0c;文件会保存到SD卡上&#xff0c;路径为 \storage\sdcard\Download

php-fpn配置,目标检测系列 Mask R-CNN—FPN

mask-rcnn.jpg其实卷积是和图片大小是无关的&#xff0c;请关注我的西瓜视频账号 zidea 可以找到对应相关视频分享图FPN(Feature pyramid networks)Faster R-CNN 使用标准的 Res​​net 网络结构作为基础网络&#xff0c;来提取特征&#xff0c;提取大小不同的特征图来用来解决…

联想收购诺基亚?玩笑而已别太当真

据外媒报道&#xff0c;关于外界传言的联想有意收购诺基亚的消息&#xff0c;联想一位高管发表声明澄清&#xff0c;这纯粹只是个笑话而已。虽然诺基亚很无奈的又一次“中枪”&#xff0c;但市场传出联想有意收购诺基亚的消息之后&#xff0c;诺基亚股价大涨17%。 不过在联想高…

iPad进入DUF恢复模式

关机&#xff1a;Home Power 按下去黑屏后&#xff1a;开始计时 10秒 中间出现过白苹果 会消失 10秒后松开Power&#xff08;继续按Home&#xff09;&#xff0c; 12秒后黑屏这个时候是DFU模式了&#xff0c;USB线连到电脑上进行刷机

微信支付php详解 php,ThinkPHP框架整合微信支付之刷卡模式图文详解

本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式。分享给大家供大家参考&#xff0c;具体如下&#xff1a;大家好&#xff0c;这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇&#xff1a;微信刷卡支付本教程跟前三篇教程不一样&#xff0c;所需…

创业成功:产业机会+时机+团队执行力+资本加入做乘法

2-08-02 10:39 没有评论 很多业内人士应该都知道晨兴的刘芹&#xff0c;一个非常低调的投资人&#xff0c;投资过许多成功项目&#xff0c;包括搜狐、携程、九城、聚众传媒、迅雷、多玩YY、UC、小米科技、凤凰网。他在微博上说了这么一段话&#xff1a;创业成 功真是小概率…

php 某天 三天前,PHP计算时间段某天是星期几,当前时间后几天及日期时间差_PHP教程...

//取两个日期内天数差function SubDay($ntime,$ctime){$dayst 3600 * 24;$cday ceil(($ntime-$ctime)/$dayst);return $cday;}//取当前时间后几天&#xff0c;天数增加单位为1function AddDay($ntime,$aday){$dayst 3600 * 24;$oktime $ntime ($aday * $dayst);return $ok…