切换数据库的小经历

切换数据库的历程

原因:开始说好用mysql的,后来部署工程的时候换了一个人,因此变成了sql server2005,因此得修改程序

问题:数据库变换之后,dao层使用了mysql相关的语句以及hibernate配置文件还是使用的mysql的配置。

解决办法:
1.使用了分页功能,因为涉及到统计表的查询,因此原dao里面写的是sql = sql + " LIMIT " + start + " , " + pageSize; 使用的是mysql特定的语句,用sql server2005之后需要修改这个语句,修改如下:
sql="SELECT * ,ROW_NUMBER() Over(order by id DESC) as rowNum FROM ( "+sql+" ) as myTable ";
sql="SELECT * FROM ( "+sql+" ) as t where rowNum between "+start+" and "+(start+pageSize);
2.再修改hibernate的配置文件,即:hibernate.cfg.xml,最初修改为如下所示:

org.hibernate.dialect.SQLServerDialect

jdbc:microsoft:sqlserver://192.168.0.251:1433;DatabaseName=stlog
ad
123

com.microsoft.jdbc.sqlserver.SQLServerDriver

org.hibernate.dialect.SQLServerDialect
3.修改hibernate配置文件之后运行程序,出现TUser.hbm.xml和数据库映射不了,提示stlog.t_user不存在,辗转分析之后才知道原来TUser.hbm.xml中是这样,需要改为这样,增加了schema="dbo"。


4.修改为这样出Can't start a cloned connection while in manual transaction mode.错误,因此参照网上把url修改为jdbc:microsoft:sqlserver://192.168.0.251:1433;DatabaseName=stlog;SelectMethod=Cursor
参考:http://blog.csdn.net/ivan_zhang_blog/archive/2007/04/20/1572038.aspx

5.奇怪的是这一次出"[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (""): 数据类型 0x38 未知。"这个错误。最后没有办法,参考了一下其它的工程的链接方法,最后修改为:
com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:jtds:sqlserver://localhost:1433;DatabaseName=stlog;SelectMethod=Cursor
mobile
Woncore!23

net.sourceforge.jtds.jdbc.Driver

使用了jtds-1.2.jar包。

你可能感兴趣的:(j2EE)