使用jndi遇到的一些问题

本文介绍如何在Tomcat环境下配置JNDI连接池,并解决MySQL字符集问题,确保数据正确读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天使用JNDI时遇到了一些问题,现把它写出来,方便以后学习。环境:Tomcat 5.5,mysql5.0,jdk1.6,spring,struts,hibernate。

application-db.xml文件中dataSource开始采用的是commons-dbcp连接池方式,改成JNDI方式,修改如下:
1.修改application-db.xml,改为JNDI方式

<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean"
destroy-method="close">
<property name="jndiName">
<value>java:comp/env/jdbc/music</value>
</property>
</bean>

2.将commons-dbcp.jar和mysql-connector-java-5.0.4-bin.jar拷贝到common/lib/下。
3.修改conf/server.xml文件。
运行失败。错误提示:Cannot create JDBC driver of class '' for connect URL 'null'
搜索发现原来自己server.xml配置文件有问题。

<Context path="/Music" docBase="C:\Tomcat 5.5\webapps\Music"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_MysqlTest_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/music" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/music">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>root</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/music</value>
</parameter>
</ResourceParams>
</Context>


Tomcat 5.5以后应该写成

<Context path="/Music" >
<Resource
name="jdbc/music"
type="javax.sql.DataSource"
password="root"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://127.0.0.1/musicautoReconnect=true&useUnicode=true&characterEncoding=utf-8&?mysqlEncoding=utf8"
maxActive="4"/>


重新启动。获取数据连接正常,可以登录系统。
但是在做插入操作时有问题了:Data truncation: Data too long for column 'NAME' at row 1。

字符集合错误,再看server.xml中的配置:

url="jdbc:mysql://127.0.0.1/music?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&?mysqlEncoding=utf8"


问题找到了,将它改为:
url="jdbc:mysql://127.0.0.1/music
就可以了。

注意2个问题:
1.tomcat 5.5以后的版本的jndi配置方式与之前版本是不同的。
2.在mysql4.1.0版 要设置characterEncoding的值的,如果是5.0版以上的,加不加都是没有关系的!如果加的字符集与创建数据库时指定的字符集不一致,将会容易出现字符集错误问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值