Hibernate3 链接不上 SQLServer2000Hibernate3 可以用com.microsoft.jdbc.sqlserver.SQLServerDriver这个驱动来链接 SQLServer2000 这个数据库吗?
经我测试,网上有说这个驱动有Bug,要换用“net.sourceforge.jtds.jdbc.Driver”这个驱动。我就换用“net.sourceforge.jtds.jdbc.Driver”这个驱动:
1、把jtds-1.2.jar 放入lib文件夹
2、hibernate.cfg.xml文件内容:<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>        <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
        <property name="connection.url">jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=mysql;selectMethod=Cursor;</property>
        <property name="connection.username">sa</property>
        <property name="connection.password">sa</property>
                <!-- SQL方言 -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
        <!-- 是否在执行期在控制台上输出SQL语句 -->
        <property name="show_sql">true</property>        <mapping resource="Message.hbm.xml"/>    </session-factory></hibernate-configuration>3、映射文件 Message.hbm.xml:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
  <class name="com.excel.training.hib.Message" table="MESSAGE">
    <id name="id" column="ID" type="int">
      <generator class="increment"/>
    </id>
    <property name="text"  column="TEXT"  type="string"  />  
  </class>
</hibernate-mapping>
4、测试类:public class MessageService {  public static void main(String[] args) throws Exception {
    // 创建SessionFactory
    SessionFactory sf = new Configuration().configure().buildSessionFactory();
    // 打开一个Session
    Session session = sf.openSession();
    // 开始一个事务
    Transaction tx = session.beginTransaction();
    Message msg = new Message();
    msg.setText("Arrived message at " + new Date());
    session.save(msg);
    session.getTransaction().commit();  }
}
5、运行报错:Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354)
at com.excel.training.hib.MessageService.main(MessageService.java:17)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=mysql;selectMethod=Cursor;
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 5 more由出错信息来看,不能打开链接,是由驱动不对引起的。
但是我已经把jtds-1.2.jar包放在WEB-INF/lib文件夹下了,在java Build Path-->Libraies下可见该jar包。
打开该jar包,可找到“net.sourceforge.jtds.jdbc.Driver”这个类的.class文件,原因何在?难道是这个驱动不行?
于是我写了一个测试类来测试,部分代码:String strConnUrl = url: jdbc:microsoft:sqlserver://localhost:1433;databaseName=mysql;selectMethod=Cursor;
System.out.println("************  jtds ******************");
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
con = java.sql.DriverManager.getConnection(strConnUrl, userName, password);

System.out.println("is connected:"+!con.isClosed());
stat = con.createStatement();
res = stat.executeQuery("select * from message"); while(res.next()){
  String name=res.getString("text");
  System.out.println(name);
}
if (res != null) try {res.close();} catch(Exception e) {} 
if (stat != null) try {stat.close();} catch(Exception e) {} 
if (con != null) try {con.close();} catch(Exception e) {} 
运行结果:
************  jtds ******************
is connected:true
123456
7788456由此看来,这个驱动是没有问题的。请各位帮我分析一下,该怎么解决这个问题呀!

解决方案 »

  1.   

    com.microsoft.jdbc.sqlserver.SQLServerDriver
    用这个没问题啊,我们学校都是用这个的啊
      

  2.   

    这个问题可能跟tomcat 下的lib包有关系,把你那个sqlserver的 驱动包放到 本机 tomcat下的lib文件夹里面再启动试试 
      

  3.   

    com.microsoft.jdbc.sqlserver.SQLServerDriver
    这个驱动只用jdbc是可以用的: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    //String strConnUrl = url: jdbc:microsoft:sqlserver://localhost:1433;databaseName=mysql;selectMethod=Cursor;
    Connection con = java.sql.DriverManager.getConnection(strConnUrl, userName, password);

    System.out.println("is connected:"+!con.isClosed());
    Statement stat = con.createStatement();
    ResultSet res = stat.executeQuery("select * from message"); while(res.next())
    {
      String name=res.getString("text");
      System.out.println(name);
    }输出:
    is connected:true
    123456
    7788456
    但是用在Hibernate3里面就不行了。
    mysql, oracle里面都可以用,单单sql server 2000 就不行??
      

  4.   

    会不会是Hibernate 版本问题呀?
      

  5.   

    你那个hibernate配置里的connection.url用这个试试
    jdbc:jtds:sqlserver://127.0.0.1:1433/mysql
      

  6.   

    net.sourceforge.jtds.jdbc.Driver
    url:jdbc:jtds:sqlserver://localhost:1433/webCall
    方言:
    org.hibernate.dialect.SQLServerDialect
    试一下