从网上的Blog转来的,这里唯一不同的就是人家使用RPM安装的。说明还是比较细致的
环境:
Linux系统
java1.4.2
TOMCAT5.5.23
MYSQL5.0.22
安装TOMCAT后,目录common/lib中一般应有如下驱动:
commons-el.jar (Commons Expression Language 1.0)
commons-logging-api.jar (Commons Logging API 1.0.x)
jasper-compiler.jar (Jasper 2 Compiler)
jasper-compiler-jdt.jar (Eclipse JDT Java compiler)
jasper-runtime.jar (Jasper 2 Runtime)
jsp-api.jar (JSP 2.0 API)
naming-common.jar (JNDI Context implementation)
naming-factory.jar (JNDI object factories for J2EE ENC support)
naming-factory-dbcp.jar (DataSource implementation based on commons-dbcp)
naming-resources.jar (JNDI DirContext implementations)
servlet-api.jar (Servlet 2.4 API)
而使用redhat的RPM包安装TOMCAT后,jar文件并不完全,因此向common/lib添加如下驱动:
naming-factory-dbcp.jar (DataSource implementation based on commons-dbcp)
mysql-connector-java-5.1.5-bin.jar
如使用hibernate则应在项目下的WEB-INF/lib下添加如下驱动:
antlr-2.7.6.jar
hibernate3.jar
asm-all-3.1.jar
cglib-2.2.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
1.打开MYSQL,建立数据
创建数据库:create database testdb
使用这个库,在里面创建一张表:
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`address` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
插入纪录:
INSERT INTO `test` VALUES (1,'tom','123'),(2,'alice','123'),(3,'tom','123'),(4,'tom','123'), (5,'tom','123'), (6,'tom','123');
2.打开TOMCAT安装目录下的CONF目录中文件SERVER.XML中添加如下内容:
<GlobalNamingResources>
.......................
<Resource
auth=”Container”
type="javax.sql.DataScource"
name="jdbc/dstest"
driverClassName="com.mysql.jdbc.Driver"
maxActive="10"
maxIdle="3"
maxWait="5000"
username="root"
password="qwe123" # qwe123为你自己数据库的密码
url="jdbc:mysql://localhost:3306/testdb"/> # testdb为数据库的名字
</GlobalNamingResources>
3.在目录conf/Catalina/localhost下建立如下文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context
crossContext="true"
reloadable="true">
<ResourceLink
global="jdbc/dstest"
name="jdbc/dstest"
type="javax.sql.DataSource"/>
<ResourceLink
global="UserDatabase"
name="UserDatabase"
type="org.apache.catalina.UserDatabase"/>
</Context>
4.在目录webapps下创建目录dstest,在应用dstest的WEB-INF目录下的WEB.XML中写入如下内容:
<web-app>
<resource-ref>
<description>mysql connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataScource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
5.在目录dstest中写一个test.jsp测试程序:
<%@ page language="java"%>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Test Database </title>
</head>
<body >
<center>Test Database Source Pools</center>
<table border="0" align="center">
<%
Context initctx = new InitialContext();
if(initctx == null )
throw new Exception("No Context");
DataSource ds = (DataSource) initctx.lookup("java:comp/env/jdbc/dstest");
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = ds.getConnection();
stmt = conn.prepareStatement("select * from test");
rs = stmt.executeQuery();
while(rs.next()){
out.print("<tr>");
out.print("<td>"+rs.getInt(1)+"</td>");
out.print("<td>"+rs.getString(2)+"</td>");
out.print("<td>"+rs.getString(3)+"</td>");
out.print("</tr>");
}
rs.close();
rs=null;
stmt.close();
stmt=null;
conn.close();
conn =null;
} catch(SQLException e){
e.printStackTrace();
} finally {
if (rs != null) {
try { rs.close(); } catch (SQLException e) { ; }
rs = null;
}
if (stmt != null) {
try { stmt.close(); } catch (SQLException e) { ; }
stmt = null;
}
if (conn != null) {
try { conn.close(); } catch (SQLException e) { ; }
conn = null;
}
}
%>
</table>
</body>
</html>
6.测试,运行TOMCAT,打开网页输入http://localhost:8080/dstest/test.jsp,如果能看到数据库中刚保存的数据,那就表示配置成功。
可能出现的问题:
1、Cannot create JDBC driver of class '' for connect URL ''
问题:找不到jdbc驱动,但是提示信息里的class值为null,所以,可以断定Tomcat没有找到Server.xml里的Resource配置信息。
可能的原因包括:(1)没有配置Resource;(2)Resource配置信息放置的位置错误。(3)一个不容易发现的错误,driverClassName和url拼写错误。
解决办法:确认Resource配置正确,并且必须放在DefaultContext或者 Context配置节内。
2、Cannot create JDBC driver of class 'xxx' for connect URL ''
解决办法:配置的数据库驱动类名xxx是错误的,检查并修改即可;如果确认正确,那就是找不到驱动库,拷贝一个jar到Tomcat/common/lib中即可。
3、Cannot create JDBC driver of class '' for connect URL 'xxx'
解决办法:配置的url字符串语法是错误的,检查后修改即可。
4、Cannot create PoolableConnectionFactory, cause: Io 异常: Connection refused
问题:无法创建连接池工厂对象,原因是连接被拒绝。
解决办法:检查url字符串,可能服务器地址、端口、数据库名或者数据库实例名等信息错误。修改。
5、No suitable driver
问题:没有匹配的驱动
分析:驱动程序配置错误,请确认Tomcat的common/lib子目录中是否有数据库驱动jar。
6、Cannot create resource instance无法创建数据源实例
问题:找不到commons-dbcp-1.1.jar(版本可能不同)
解决办法:复制commons-dbcp-1.1.jar库文件到Tomcat/Common/lib子目录中。
7、root cause:
java.lang.NoClassDefFoundError: org/apache/commons/collections/CursorableLinkedList
问题:找不到commons- collections.jar。
解决办法:复制commons-collections.jar库文件到Tomcat/Common/lib子目录中。
8、root cause:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
问题:找不到commons-pool- 1.1.jar(版本可能不同)。
解决办法:复制commons-pool-1.1.jar库文件到Tomcat/Common/lib子目录中。
9: Error during query: Unexpected Exception: java.io.CharConversionException message given: null
请见 MySQL 论坛 http://forums.mysql.com/read.php?39,142452,142452
大多数情况下,将JAVA从 1.4.x 升级到 1.5 即可。也可以在mysql 配置中将变量 default-character-set 设置为utf8,向文件 /etc/my.cnf中添加如下内容:
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
设置完成后重新启动 mysql 即可。