高分求解关于MYSQL和HIBERNATE连接发生错误问题,求解决方案
小弟一直用MYSQL和HIBERNATE,但最近换了单位,在新单位想架设原来的structs框架,遇到了MYSQL和HIBERNATE连接问题.
我的TOMCAT中的SERVER.XML文件这样写的
<Context path="/PopeDom" reloadable="true" docBase="D:\workspace\PopeDom" workDir="D:\workspace\PopeDom\work\org\apache\jsp" >
<Resource name="RedstoneSql" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="RedstoneSql">
<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>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>red</value>
</parameter>
<parameter>
<name>password</name>
<value>red</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://192.168.0.10/popedom</value>
</parameter>
</ResourceParams>
</Context>
驱动mysql-connector-java-3.0.11-stable-bin.jar已经加入TOMCAT的LIB中
hibernate.cfg.xml也写了
<property name="connection.datasource">java:comp/env/RedstoneSql</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.0.10/popedom</property>
<property name="hibernate.connection.username">red</property>
<property name="hibernate.connection.password">red</property>
在web.xml中写了
<resource-ref>
<description>DB Connection</description>
<res-ref-name>RedstoneSql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
但小弟使用中报错
错误为
2005-06-03 10:14:25 [net.sf.hibernate.util.JDBCExceptionReporter]-[WARN]:38 - SQL Error: 0, SQLState: null
2005-06-03 10:14:25 [net.sf.hibernate.util.JDBCExceptionReporter]-[ERROR]:46 - Cannot create JDBC driver of class '' for connect URL 'null'
2005-06-03 10:14:25 [net.sf.hibernate.impl.SessionFactoryImpl]-[WARN]:178 - Could not obtain connection metadata
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
小弟使用的是ECLIPSE,小弟百思不得其解,望高手们帮忙
问题点数:100、回复次数:19Top
1 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 10:56:54 得分 50
第一:你的tomcat的数据源配置以前是否好用
第二:如果用hibernate,在web.xml那段配置应该是多余的
第三:你先单独测试下,数据源已经配置成功Top
2 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 10:59:13 得分 0
从你错误中,是驱动找不到或者数据源没有配置好
Top
3 楼querlang(编程浪子)回复于 2005-06-03 11:45:23 得分 10
很明显驱动程序找不到Top
4 楼Cupid1945(柳过)回复于 2005-06-03 11:58:17 得分 0
我写的
<!--测试数据源-->
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
DataSource ds = null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//从Context中lookup数据源。
ds = (DataSource)envCtx.lookup("RedstoneSql");
if(ds!=null)
{
out.println("已经获得DataSource!");
out.println("<br>");
Connection conn = ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rst=stmt.executeQuery("select * from login");
out.println("以下是从数据库中读取出来的数据");
while(rst.next())
{
out.println("bookName:"+rst.getString("Name"));
out.println("<br>");
}
}
else
out.println("连接失败!");
}
catch(Exception ne)
{
out.println(ne);
}
%>
打印结果是
已经获得DataSource!
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
我已经在TOMCAT的LIB中加入了mysql-connector-java-3.0.11-stable-bin.jar怎么办啊?我很着急Top
5 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 12:27:02 得分 0
把驱动放在\shared\lib\下,或者放在你的站点的web-inf\lib下,也可以在你的工程项目中,那这个驱动的路径写入你的eclipse的工程路径中,然后重新部署Top
6 楼Cupid1945(柳过)回复于 2005-06-03 14:34:50 得分 0
我在web-inf\lib下面加了mysql-connector-java-3.1.7-bin.jar这个驱动,在TOMCAT的COMMON/LIB下面也加了,在CLASSPATH里也写了C:\Tomcat\common\lib\mysql-connector-java-3.1.7-bin.jar,可还是报
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
这个错,这是什么原因呢.是不是还有什么配置不完整的地方Top
7 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 14:50:42 得分 0
是驱动找不到了,你直接连mysql看看能不能连上就知道是不是驱动的问题了Top
8 楼tonynt(菜青虫)回复于 2005-06-03 16:21:21 得分 0
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>这个配置可能不对Top
9 楼tonynt(菜青虫)回复于 2005-06-03 16:21:21 得分 0
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>这个配置可能不对Top
10 楼tonynt(菜青虫)回复于 2005-06-03 16:24:51 得分 40
这个问题可能是你使用了和以前版本不同的Hibernate导致的;不同版本的Hibernate在dialect和hibernate.connection.driver_class两个属性上的配置可能是不一样的。
当前版本具体支持怎样的配置,可以到$Hibernate$\etc\hibernate.properties文件中查找。
如果你用hibernate3.0 dialect就不能用
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
而要用
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>Top
11 楼Cupid1945(柳过)回复于 2005-06-03 16:33:24 得分 0
import java.sql.*;
public class mysql {
public static void main(String args[])
{
String driver="com.mysql.jdbc.Driver";
Statement s=null;
try
{
//加载driver
Class.forName(driver).newInstance();
}
catch(Exception e)
{
e.printStackTrace();
return;
}
Connection con=null;
String url="jdbc:mysql://localhost/query?user=red&password=red";
try
{
//创建连接
con=DriverManager.getConnection(url);
//构造语句
s=con.createStatement();
//得到结果集
ResultSet rs=s.executeQuery("select * from operator");
while(rs.next())
{
String val;
val=rs.getString(2);
if(rs.wasNull())
{
val=null;
}
System.out.println(val);
}
}
catch(SQLException e)
{
e.printStackTrace();
}
finally
{
if(con!=null)
try
{
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
打印结果完全正常
admin
ad222
这是不是意味着驱动是对的啊
仅仅是配置不对
兄弟们一定要帮帮忙啊!好象有点眉目了
我将我的配置文件全部贴出来,请兄弟们帮忙Top
12 楼Cupid1945(柳过)回复于 2005-06-03 16:47:15 得分 0
hibernate.properties中
## MySQL
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://192.168.0.10/popedom
hibernate.connection.username red
hibernate.connection.password red
hibernate.cfg.xml中
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/RedstoneSql</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.0.10/popedom</property>
<property name="hibernate.connection.username">red</property>
<property name="hibernate.connection.password">red</property>
<mapping resource="com/redstoneinfo/popemon/hibernate/login.hbm.xml"/>
<mapping resource="com/redstoneinfo/popemon/hibernate/authority.hbm.xml"/>
<mapping resource="com/redstoneinfo/popemon/hibernate/part.hbm.xml"/>
</session-factory>
</hibernate-configuration>
web.xml中
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts/struts-config.xml,
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>RedstoneSql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
server.xml中
<Context path="/PopeDom" reloadable="true" docBase="D:\workspace\PopeDom" workDir="D:\workspace\PopeDom\work\org\apache\jsp" >
<Resource name="RedstoneSql" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="RedstoneSql"> <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>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>red</value>
</parameter>
<parameter>
<name>password</name>
<value>red</value>
</parameter>
<parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter>
<parameter>
<name>url</name> <value>jdbc:mysql://192.168.0.10/popedom</value>
</parameter>
</ResourceParams>
</Context>
Top
13 楼Cupid1945(柳过)回复于 2005-06-03 16:53:33 得分 0
hibernate.properties中
## MySQL
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://192.168.0.10/popedom
hibernate.connection.username red
hibernate.connection.password red
hibernate.cfg.xml中
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/RedstoneSql</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.0.10/popedom</property>
<property name="hibernate.connection.username">red</property>
<property name="hibernate.connection.password">red</property>
<mapping resource="com/redstoneinfo/popemon/hibernate/login.hbm.xml"/>
<mapping resource="com/redstoneinfo/popemon/hibernate/authority.hbm.xml"/>
<mapping resource="com/redstoneinfo/popemon/hibernate/part.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Top
14 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 17:02:41 得分 0
问一个小问题
你既然用了hibernate.properties
还有hibernate.cfg.xml??
它们用一个就够了
如果方便,你把东西给我吧,我给你调试好,然后给你吧
呵呵
我的MSN
YHX13757589241@hotmail.comTop
15 楼Cupid1945(柳过)回复于 2005-06-03 17:43:38 得分 0
那太谢谢了
我的Cupid1945@126.comTop
16 楼Cupid1945(柳过)回复于 2005-06-03 17:49:47 得分 0
呵呵,不能加你呀,你没注册PASSPORTTop
17 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 18:13:10 得分 0
写错了
yxh13757589241@hotmail.com
不好意思
Top
18 楼yxhzj(余华[学习J2EE中])回复于 2005-06-03 18:39:20 得分 0
怎么跑这么快
你的sql数据库的sql呢?Top
19 楼Cupid1945(柳过)回复于 2005-06-15 09:39:45 得分 0
我找到问题的所在,TOMCAT5.5和TOMCAT5.0实在有很多不同,所以我用的mysql-connector-java-3.0.11-stable-bin.jar似乎与其兼容有问题Top




