JSP +Tomcat数据库访问

系统 1998 0

JSP +Tomcat 数据库访问

 

作者:刘志远

 

 

在一般的 Web 项目开发中,对数据库的访问是必不可少的,本文主要介绍两种在使用 Tomcat 作为 Web 服务的 JSP 开发中访问数据库的方法,希望能对刚接触 JSP 开发的朋友有所帮助。 用过 .NET 平台的朋友应该知道,项目中需要访问数据库时,直接导入相应的数据库命名空间,写个数据库连接字符串(如数据库名、用户名、密码等)后,则可以很容易的获得数据库连接对象。其实 Java 中访问数据库也差不多是那样,但这对于刚接触 Java 开发环境的朋友来说可能还是比较棘手的:不知道数据库连接信息如何配置,到底要调用哪些对象,以及 JDBC 数据库驱动、 JDBC 数据源、连接池等 是些什么。本文尽量对这些基本问题做个明了的介绍。

 

       微软 Windows 平台提供的统一数据库访问方式是 ODBC Open DataSource Connectivity ),也就是一些 ODBC API(应用程序编程接口) 。访问数据库时,开发者在程序中只需调用 ODBC API ODBC 驱动程序就会将请求转换为特定的数据库调用请求(这个过程比较复杂,但对开发者来说是隐藏的,不必了解这个转换过程是怎样的),就可方便的完成数据库访问操作。 类似 MS ODBC Sun 公司推出了 JDBC Java Database Connectivity ), JDBC 只是一些描述访问关系数据库的标准 Java 类库的 API 而已,并没有提供访问具体数据库的功能,但它的这些接口却为各数据库厂商提供访问自己数据库的驱动的一个标准,方便他们实现自己的 JDBC 驱动程序类。 JDBC 驱动程序类实现了 JDBC 中定义的各个接口,也就真正提供了访问数据库的功能。 而一般情况下,我们的开发环境 ( MyEclips) 并不像 .NET 开发环境那样自带了这些数据库驱动程序类库,所以在开发过程中,我们往往得自己到所使用的关系数据库厂商网站去下载对应的 JDBC 驱动类库 .jar 格式, Oracle 的可直接在 oracle 安装目录的 jdbc 文件夹中的 lib 下找到),再添加到项目中,如放在 WEB-INF 下的 lib 文件夹中。 有在程序中包含了数据库的 JDBC 驱动类库才能实现数据库的访问,这一步是非常关键的。

 

下面笔者就对几种常见的数据库的访问设置及相关内容做个介绍。

 

         首先,由于各数据库厂商提供的 JDBC 驱动类库是不一样的,你可能很自然就想到访问数据时必须写明数据库程序的 JDBC 驱动类名。再者,你的程序要访问的是哪个机器上的数据库,以及具体数据库的名称是什么(一般一个关系数据库软件中可以创建很多数据库),在 Java 中,我们把这几个信息称为数据库的 JDBC URL 。此外,用哪个用户(当然也要提供密码)访问该数据库我们也必须描述。通常,包含了 JDBC 驱动类库,再提供上面的信息就可以很容易的访问数据库了。

 

常见数据库的 JDBC 驱动类名如下:

数据库

数据库 JDBC 驱动类名

Oracle

oracle.jdbc.driver.OracleDriver

SQL Server 2000

com.microsoft.jdbc.sqlserver.SQLServerDriver

SQL Server 2005

com.microsoft.sqlserver.jdbc.SQLServerDriver

MySQL

com.mysql.jdbc.Driver

 

常见数据库 JDBC URL 的形式如下:

数据库

JDBC URL

Oracle

jdbc:oracle:thin:@localhost:1521:oracle9i

localhost :机器名,也可以是 IP   oracle9i :要访问的数据库名

SQL Server 2000/2005

jdbc:microsoft:sqlserver://localhost:1433;databasename=dbname

MySQL

jdbc:mysql://localhost:3306/databasename

 

         做好上面的准备后,用几行代码就可以访问数据库了。访问数据库的方式又分两种:直接访问和通过数据源连接池访问。下面以访问 Oracle 数据库为例进行介绍,其他数据库都类似。

 

 

方法一 直接访问

 

         访问代码如下:

         String driverClass = "oracle.jdbc.driver.OracleDriver" ;       

         String url = "jdbc:oracle:thin:@localhost:1521:oracle9i" ;

         String username = "cotte" ;

         String password = "tiger" ;

         Class. forName (driverClass);

         Connection conn = DriverManager. getConnection (url, username, password);

         Statement stmt = conn.createStatement();

         ResultSet rs = stmt.executeQuery( "select * from jobs" );

 

         从代码中可以看出, JDBC 访问数据库是比较简单的,且步骤统一:先调用 Class 类的 forName() 方法指定数据库驱动类型,再调用 DriverManager 类的 getConnection() 方法获得数据库连接对象,接着调用 Connection 对象的 createStatement() 方法获得 Statement 类,通过调用 Statement 类的各种访问数据的方法就可以访问、操作数据库了。这里的 ResultSet 对象包含了从数据库中查询到数据。

JSP +Tomcat数据库访问
 

 

 

 

方法二 使用 JDBC 数据源和连接池访问数据库

 

         方法一使用的方法还是比较方便的,但用户每次访问数据库时都必须创建一个数据库连接对象,这个过程是要耗费服务器资源和消耗一定的时间的,且一个数据库服务器同时建立的连接数目也是有限的。用户少时不会有多大影响,但如果访问数据库的用户数量较大时这就会成为影响系统性能的一个瓶颈,为解决这个问题,聪明的程序员们想出了 “JDBC 数据源和连接池 方法,从而较好的处理了这个问题,在大型网站开发中往往采用这种方法。

 

         普通数据库访问中,客户程序得到的是物理连接对象,使用完后调用连接对象的 close() 方法关闭连接。而连接池技术则是在一个连接池中先创建多个数据库物理连接,通过数据源来调用连接池中的数据库连接。用户用完数据库连接完后并不会直接关闭连接对象的物理连接,而只是将其释放回连接池,供下个用户使用,这样就就节省了创建连接的时间。

JSP +Tomcat数据库访问
 

 

         Tomcat 提供了数据源和连接池的实现,我们直接使用就行了。在使用的时候还要明白这个原理: 由于是使用 Tomcat 提供的数据源实现来访问数据库(注意:数据源本身并不提供具体的数据库访问功能,只是作为连接对象的工厂,实际的数据访问操作仍然是由对应数据库的 JDBC 驱动来完成), 这里是 Tomcat 需要 JDBC 驱动,而不再是应用程序需要 JDBC 驱动,所以得先将对应数据库的 JDBC 驱动类库( .jar 格式)拷贝到 Tomcat 目录中的 lib 文件夹下,供 Tomcat 调用。

 

         由于是 Tomcat 来访问数据库,所以在程序中不用写访问数据库的信息,但得先配置(或告知) Tomcat 这些信息。

 

一般可以在 Tomcat 目录下 \conf\context.xml 文件的 <Context> 元素内添加 <Resource> 元素来配置 JDBC 数据源信息,以 Orcale 为例,其他类似(注意一点的是, Tomcat 下的配置信息对所有 Web 项目程序都有效 )。

< Resource name = "jdbc/oracleds" auth = "Container" type = "javax.sql.DataSource" maxIdle = "30" maxWait = "10000" maxActive = "10" username = "cotte" password = "tiger" driverClassName = "oracle.jdbc.OracleDriver" url = "jdbc:oracle:thin:@127.0.0.1:1521:oracle9i" />

 

这些属性的含义如下:

键名

含义

name

指定资源相对于 java:comp/env 上下文的 JNDI 名。(可按需修改)

auth

指定资源的管理者。(默认 Container 即可)

type

指定资源所属的 Java 类的完整限定名。(默认即可)

maxIdle

指定连接池中保留的空闲数据库连接的最大数目。(可按需修改)

maxWait

指定等待一个数据库连接成为可用状态的最大时间,单位毫秒。(可按需修改)

username

指定连接数据库的用户名。(按读者的具体情况修改)

password

指定连接数据库的密码。(也是按读者的具体情况修改)

driverClassName

指定 JDBC 驱动程序类名。(按读者使用的数据库程序修改,具体值可参加前面列的 常见数据库的 JDBC 驱动类名

url

指定连接数据库的 URL 。(也是按读者使用的情况修改,具体值可参加前面列的 常见数据库 JDBC URL 的形式

 

除了配置 Tomcat context.xml 文件外,也可 web 项目的 META-INF 文件夹下新增文件 context.xml 其内容和上面的基本一样 如下。(因为 Web 程序部署发布时 Tomcat 会自动加载 WEB-INF 下的内容 ,也就可以获得这些信息了, 所以和上面的是一样的效果。但要明白一点的是: 这样的配置就只对当前 Web 项目有效,其他项目不能使用这些信息

<? xml version = '1.0' encoding = 'utf-8' ?>

< Context reloadable = "true" >

< Resource name = "jdbc/oracleds" auth = "Container" type = "javax.sql.DataSource" maxIdle = "30" maxWait = "10000" maxActive = "10" username = "lzy" password = "lzy" driverClassName = "oracle.jdbc.OracleDriver" url = "jdbc:oracle:thin:@127.0.0.1:1521:oracle9i" />

</ Context >

 

做好前面的准备后,下面就只需简单的几行访问代码就可以访问数据库了,代码如下:

             javax.naming.Context ctx = new javax.naming.InitialContext();

             javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup( "java:comp/env/jdbc/oracleds" );

             java.sql.Connection conn = ds.getConnection();                 

             java.sql.Statement stmt=conn.createStatement();

             java.sql.ResultSet rs = stmt.executeQuery( "select * from jobs" );

 

         其过程与前面的差不多,只是用了 Context 对象的 lookup() 方法找到 DataSource 对象,再用 DataSource 对象的 getConnection() 方法就获得了数据库连接对象。  

 

JSP +Tomcat数据库访问


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论