今天使用JNDI时遇到了一些问题,现把它写出来,方便以后学习。环境:Tomcat 5.5,mysql5.0,jdk1.6,spring,struts,hibernate。
application-db.xml文件中dataSource开始采用的是commons-dbcp连接池方式,改成JNDI方式,修改如下:
1.修改application-db.xml,改为JNDI方式
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配置文件有问题。
Tomcat 5.5以后应该写成
重新启动。获取数据连接正常,可以登录系统。
但是在做插入操作时有问题了:Data truncation: Data too long for column 'NAME' at row 1。
字符集合错误,再看server.xml中的配置:
问题找到了,将它改为:
注意2个问题:
1.tomcat 5.5以后的版本的jndi配置方式与之前版本是不同的。
2.在mysql4.1.0版 要设置characterEncoding的值的,如果是5.0版以上的,加不加都是没有关系的!如果加的字符集与创建数据库时指定的字符集不一致,将会容易出现字符集错误问题。
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版以上的,加不加都是没有关系的!如果加的字符集与创建数据库时指定的字符集不一致,将会容易出现字符集错误问题。