Hibernate3 SQLServer2000 驱动问题

sugarTan 2011-04-27 08:56:53
Hibernate3 链接不上 SQLServer2000

Hibernate3 可以用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

由此看来,这个驱动是没有问题的。

请各位帮我分析一下,该怎么解决这个问题呀!

...全文
167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
newoneheb123 2011-04-29
  • 打赏
  • 举报
回复
net.sourceforge.jtds.jdbc.Driver
url:jdbc:jtds:sqlserver://localhost:1433/webCall
方言:
org.hibernate.dialect.SQLServerDialect
试一下
sugarTan 2011-04-29
  • 打赏
  • 举报
回复
Ok, Thank you!
alpha_423 2011-04-29
  • 打赏
  • 举报
回复
你那个hibernate配置里的connection.url用这个试试
jdbc:jtds:sqlserver://127.0.0.1:1433/mysql
sugarTan 2011-04-29
  • 打赏
  • 举报
回复
会不会是Hibernate 版本问题呀?
sugarTan 2011-04-27
  • 打赏
  • 举报
回复
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 就不行??
lianjiaying 2011-04-27
  • 打赏
  • 举报
回复
这个问题可能跟tomcat 下的lib包有关系,把你那个sqlserver的 驱动包放到 本机 tomcat下的lib文件夹里面再启动试试
安心逍遥 2011-04-27
  • 打赏
  • 举报
回复
com.microsoft.jdbc.sqlserver.SQLServerDriver
用这个没问题啊,我们学校都是用这个的啊

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧