⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17.html

📁 写给JSP初级程序员的书
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<meta name="description" content="Java,JDBC,EJB,Open Source,jdk,rmi">
<meta name="Keywords"
content="Java, servlets, Java servlet, Javascript, ActiveX, VRML,
        applet, applets, directory, news, jdbc, applications, 
        Java applications, Java developer, Java development, developer, 
        classes, Jars.com, Jars, intranet, Java applet, Javabeans, 
        Java products, JDK, Java development kit, java development environment, JIT,
        JavaPlan, enterprise tools, JVM, Java Virtual Machine, Java resources, 
        SUN, CGI, Perl, database, network, html,
        xml, dhtml, rating, ratings, review, jars, cgi, programming,
        software review, software rating">
<title>csdn_数据源在JDBC中的应用</title>
<style>
.news {   BACKGROUND: #007cd3;  font-family: "宋体"; font-size: 9pt }
.t {  font-family: "宋体"; font-size: 9pt }
.t1 { color:#007cd3;  font-family: "宋体"; font-size: 9pt }
.white { font-family: "宋体"; font-size: 9pt;color:#FFFFFF }
.red { font-family: "宋体"; font-size: 9pt;color:#FF0000 }
A:visited {color:#0000FF}
A:hover {color: #ff6666; text-decoration: none}
.text {font-size: 12px; line-height: 160%; font-family: "宋体"}
.text1 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text1:visited {color:#000000}
.text1:hover {color: #000000}
.text2 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text2:visited {color:#000000}
.text2:hover {color: #000000}
.text3 {font-size: 12px; line-height: 100%; font-family: "宋体"; text-decoration: none}
.large {font-size: 14.8px; line-height: 130%}
</style>
</head>

<body


<center>




  <tr>
    <td WIDTH="100%" VALIGN="TOP">
      <tr>
        <td WIDTH="100%" CLASS="white"></td>
      </tr>
    
      <tr>
        <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>数据源在JDBC中的应用  </td>
    <p>    <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>作者:冯睿 </td></p>
      </tr>
      <tr>        <td WIDTH="100%" bordercolor="#FFFFFF" CLASS="t" bgcolor="#F0F0F0" colspan="2">
        <H4>简介</H4>
            <P class=content>众所周知,JDBC(Java数据库连接)是Java 
            2企业版的重要组成部分。它是基于SQL层的API。通过把SQL语句嵌入JDBC接口的方法中,用户可以通过Java程序执行几乎所有的数据库操作。JDBC只提供了接口,具体的类的实现要求数据库的设计者完成。通过生成这些接口的实例,即使对于不同的数据库,Java程序也可以正确地执行SQL调用。所以对于程序员来说,不必把注意力放在如何向数据库发送SQL指令,因为程序员需要了解和用到的只是JDBC的接口,只有在极少数情况下会用到面向特定数据库的类,例如程序员希望使用ORACLE的扩展API。</P>
            <P 
            class=content>在JDBC程序中,首先需要做的是实现与数据库的连接。在示例程序中,我们使用的是ORACLE8i的JDBC包。连接数据库通常需要实现以下几个步骤:</P>
            <P class=content>1. 
            注册数据库驱动程序(driver)。可以通过调用java.sql.DriverManager类的registerDriver方法显式注册驱动程序,也可以通过加载数据库驱动程序类隐式注册驱动程序。例如我们希望向虚拟机注册<A 
            Oracle8i 
            JDBC驱动程序</P>
            
              <table><tbody>
              <TR>
                <TD bgColor=#e6e6e6 class=code><B>// 
                  显式注册<BR>DriverManager.registerDriver(new oracle.jdbc.driver.<A 
                  OracleDriver());<BR>// 
                  隐式注册<BR>Class.forName(“oracle.jdbc.driver.<A 
                  OracleDriver”);</B></TD></TR></TBODY><P 
            class=content>关于虚拟机如何自动注册通过类加载器(ClassLoader)加载的数据库驱动程序超过了本文讨论的范围,在此不做详细讨论。</P>
            <P class=content>2. 
            建立连接。调用java.sql.DriverManager类的getConnection()方法可以建立与数据库的连接。GetConnection()方法返回一个Connection对象。需要注意的是,getConnection()方法会自动从数据库驱动程序注册表中选择一个最合适的驱动程序。</P>
            <P class=content>3. 
            建立连接后,允许自动更新(AutoCommit)。调用java.sql.Connection接口的serAutoCommit()方法可以设定当程序向数据库发出一条SQL指令后,数据库是否立即更新。</P>
            <P class=content>下面是一个具体的实例。在该实例中,作为getConnection()方法参数的url使用的是Net8 
            keyword-value 
            pair格式。当然也可以使用普通格式。数据库安装在名为Chicago的服务器上,使用的协议是TCP协议,使用的端口是1521,数据库的SID是chidb,使用的数据库驱动程序是<A 
            Oracle
            JDBC Thin驱动程序。</P>
            
              <table><tbody>
              <TR>
                <TD bgColor=#e6e6e6 class=code><B>import java.sql.*;<BR><BR>// 
                  初始化常数<BR>private static String url 
                  =<BR>  “jdbc:oracle:thin:@(description=(address=(host=Chicago)” 
                  +<BR>  “(protocol=tcp)(port=1521))(connect_data=(sid=chidb)))”;<BR>  // 
                  也可以设定url为“jdbc:oracle:thin:@ Chicago:1521:chidb”<BR>  private 
                  static String username = “guest”;<BR>private static String 
                  password = “guest”;<BR><BR>try<BR>{<BR>  // 
                  注册数据库<BR>  Class.forName(“oracle.jdbc.driver.<A 
                  OracleDriver”);<BR>  // 
                  建立连接<BR>  Connection conn 
                  =<BR>  DriverManager.getConnection(url, username, 
                  password);<BR>// 
                  允许自动更新<BR>Conn.setAutoCommit(true);<BR>}<BR>catch(ClassNotFoundException 
                  e )<BR>{<BR>e.printStackTrace();<BR>}<BR>catch(SQLException 
                  e)<BR>{<BR>e.printStackTrace();<BR>}</B></TD></TR></TBODY><P 
            class=content>从实际应用的角度出发,我们可以看出采取这种方式连接到数据库存在几个问题。第一是安全性问题,由于程序代码中包含用户名和密码,其他人如果能得到bytecode,可以通过反编译工具获得用户名和密码。第二是代码的可移植性问题。如果希望连接的数据库名称或用户名有所更改,程序员需要修改源程序,然后把修改过的程序发送给用户。也就是说,软件无法脱离数据库独立存在。这样不仅会大大提高软件的成本,也不利于软件本身的发展。还可能出现这样的情况:在某些情况下,提供数据的机构不希望数据库的用户名和密码让编写程序的程序员知道知道。这样就提出了一个问题,如何使Java和数据库之间建立连接时隐藏一些敏感的信息。</P>
            <H4>数据源(Data Source)及JNDI</H4>
            <P class=content>数据源是在JDBC 2.0中引入的一个概念。在JDBC 
            2.0扩展包中定义了javax.sql.DataSource接口来描述这个概念。如果用户希望建立一个数据库连接,通过查询在JNDI服务中的数据源,可以从数据源中获取相应的数据库连接。这样用户就只需要提供一个逻辑名称(Logic 
            Name),而不是数据库登录的具体细节。</P>
            <P class=content>在这里有必要简单介绍一下JNDI。JNDI的全称是Java Naming and Directory 
            Interface, 
            可以理解为Java名称和目录服务接口。JNDI向应用程序提供了一个查询和使用远程服务的机制。这些服务可以是任何企业服务。对于JDBC应用程序来说,JNDI提供的是数据库连接服务。当然JNDI也可以向数据库提供其他服务,但是这超出了本文范围,在此不做论述。</P>
            <P 
            class=content>其实JNDI并不难理解。简单来说,名称服务提供了一个把文件,打印机,服务器等实体映射到一个逻辑名称的机制。例如在操作系统中的名称服务就把打印机映射到一个I/O端口。而目录服务可以理解为名称服务的一个扩展,它允许在服务中的各项拥有自己的属性。又以打印机为例,打印机可以是彩色打印机,支持双面打印,支持网络打印,支持高速打印等。所有这些打印机的属性都可以储存在目录服务中,和相应的打印机联系起来。一些常见的目录服务有NIS,NIS+,LDAP和Novell的NDS等。</P>
            <P 
            class=content>JNDI使应用程序通过使用逻辑名称获取对象和对象提供的服务,从而使程序员可以避免使用与提供对象的机构有关联的代码。例如在下面的例子中使用了在JNDI中的数据源,程序员就不需要提供<A 
            Oracle8i驱动程序的名称,这样代码的移植能力就更强。</P>
            <P 
            class=content>下面详细介绍一下数据源和javax.sql.DataSource接口。在数据源中存储了所有建立数据库连接的信息。就象通过指定文件名你可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。javax.sql.DataSource接口定义了如何实现数据源。在该接口中定义了九个属性。表一列出了对这些属性的描述。由于本文是以<A 
            Oracle</A>8i为例,在<A 
            Oracle</A>8i中没有实现roleName属性,所以在表中没有对此属性做描述。</P>
            <P class=content>表一:数据源标准属性</P>
            
              <table><tbody>
              <TR bgColor=#e9e9e9>
                <TD>
                  <P class=content>属性名称</P></TD>
                <TD>属性数据类型</TD>
                <TD>描述</TD></TR>
              <TR>
                <TD>databaseName</TD>
                <TD>String</TD>
                <TD>数据库名称,即数据库的SID。</TD></TR>
              <TR>
                <TD>dataSourceName</TD>
                <TD>String</TD>
                <TD>数据源接口实现类的名称。</TD></TR>
              <TR>
                <TD>description</TD>
                <TD>String</TD>
                <TD>对数据源的描述。</TD></TR>
              <TR>
                <TD>networkProtocol</TD>
                <TD>String</TD>
                <TD>和服务器通讯使用的网络协议名。在<A 
                  Oracle</A>8i中,该属性只在使用OCI驱动程序时有效,缺省协议是TCP协议。</TD></TR>
              <TR>
                <TD>password</TD>
                <TD>String</TD>
                <TD>用户登录密码。</TD></TR>
              <TR>
                <TD>portNumber</TD>
                <TD>Int</TD>
                <TD>数据库服务器使用的端口,缺省值为1521。</TD></TR>
              <TR>
                <TD>serverName</TD>
                <TD>String</TD>
                <TD>数据库服务器名称。</TD></TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -