在Java Web开发中都要与数据库打交道,为了避免频繁地打开和关闭数据库,以减小数据库操做负荷,可以使数据库在开发过程当中保持打开状态,在这里咱们采用配置数据源的方式(JNDI),而不是传统地JDBC方式。下面就针对常规型的MySQL5.0.15和Tomcat6.0的数据源的基本配置进行简单的介绍:
首先声明,若是数据源没有配置好的话,在开发过程当中会抛出诸以下列异常等:
一、org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
二、Caused by: java.sql.SQLException: No suitable driver
三、Name jdbc is not bound in this context
如今开始讲下如何配置好数据源同时也是解决上述异常的办法:
方案一:
步骤1、在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context> 中加入以下代码(要根据本身的状况稍加修改):
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" password="localhost" username="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/myznt" maxActive="100" maxIdle="30" maxWait="5000"/>
步骤2、在工程应用中/WEB-INF/下的web.xml中加入以下代码(要根据本身的状况稍加修改):
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/myznt</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
步骤3、把MySQL-Connector-java-3.0.12-bin.jar(可换更高版本)加到Tomcat安装目录中的lib目录下和工程中的lib目录下。
经过这三步,一个基本的数据源就配置成功了!
----------------------------------------------------------------------------------
方案二
步骤1、在Tomcat6.0解压目录conf下找到server.xml,在其中的
<GlobalNamingResources></GlobalNamingResources>中加入以下代码(要根据本身的状况稍加修改):
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" password="localhost" username="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/myznt" maxActive="100" maxIdle="30" maxWait="5000"/>
步骤2、在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context>中加入并修改为以下代码(要根据本身的状况稍加修改):
<Context path="/znt" debug="1" reloadable="true" docBase="E:\EclipseWorkPlace\MyZNT\WebRoot">
<ResourceLink global="jdbc/myznt" name="jdbc/myznt" type="javax.sql.Datasource"/>
................<!--此间可能有系统其它自配的内容,可无论-->
</Context>
步骤3、在工程中/WEB-INF/下的web.xml中加入以下代码(要根据本身的状况稍加修改):
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/myznt</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
步骤4、把MySQL-Connector-java-3.0.12-bin.jar(可换更高版本)加到Tomcat安装目录中的lib目录下和工程中的lib目录下。
经过以上四步就行了!
-----------------------------------------------------------
方案三(具备不稳定性,慎用)
步骤1、在Tomcat6.0解压目录conf下找到server.xml,在其中的<Host></Host>中加入以下代码(要根据本身的状况稍加修改):
<Context path="/znt" docBase="E:\EclipseWorkPlace\MyZNT\WebRoot"
debug="5" reloadable="true" crossContext="true"> java
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_MysqlTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/myznt" auth="Container" type="javax.sql.DataSource" password="localhost" username="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/myznt" maxActive="100" maxIdle="30" maxWait="5000"/>
</Context>
步骤2、在工程中/WEB-INF/下的web.xml中加入以下代码(要根据本身的状况稍加修改):
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/myznt</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
步骤3、把MySQL-Connector-java-3.0.12-bin.jar(可换更高版本)加到Tomcat安装目录中的lib目录下和工程中的lib目录下。
经过以上三步,大部分时候仍是起做用的,但有时会出现异常,所以不建议使用。
以上几种方案在实践中经受了测试,方案一和二比较稳定,方案三最好别用,同时只是进行了大体地概括,其中的哪些地方没有必要或哪里欠妥尚未去测试,望读者进行批评指正。
--------------------------------------------------------
Tomcat连接数据源的基本代码
Context initContext;
try {
initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet set = stmt.executeQuery("SELECT id,name,age FROM user_lzy");
while(set.next()){
System.out.println(set.getString("name"));
}
//etc.
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} mysql