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由此看来,这个驱动是没有问题的。请各位帮我分析一下,该怎么解决这个问题呀!
经我测试,网上有说这个驱动有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由此看来,这个驱动是没有问题的。请各位帮我分析一下,该怎么解决这个问题呀!
解决方案 »
- swfUpload接收到的文件名乱码问题,在线等求助啊。。。
- 有关SecretKey key = KeyGenerator.getInstance("DES")密钥的保存!!
- 很着急,哪位高手帮着解决,关于resultset
- safari 中如何获得字符的宽度跟高度
- 在s2sh整合中,java.lang.ClassNotFoundException:
- spring配置出了点问题。。。请各位看看帮忙分析下
- 请教一个国际化的问题
- 为何我用newInstance返回对象的时候会报错呢?
- jsp学习搞不懂,标签库和类有什么区别?
- 两种计数器实现的问题,求助
- 如何把lucene加入我写的S2SH web项目中
- 怎么让 struts2 标签未找到属性是报错,而不是什么也不说
用这个没问题啊,我们学校都是用这个的啊
这个驱动只用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 就不行??
jdbc:jtds:sqlserver://127.0.0.1:1433/mysql
url:jdbc:jtds:sqlserver://localhost:1433/webCall
方言:
org.hibernate.dialect.SQLServerDialect
试一下