1/ 数据库驱动
1.1/ Oracle
jdbc驱动需要注意版本,class111.jar;o_jdbc.jar。
1.2/ MS SQL Server
注意版本和网络配置(tcp和管道的权限)。
官方驱动:2000,3个jar包;2005,一个jar包。
jrds驱动:评价普遍比官方的好,注意各个版本。
1.3/ MySQL
2/ 数据库连接/session
2.1/ hibernate.cfg.xml配置jdbc驱动
2.2/ hibernate.cfg.xml配置datasource
2.3/ 在获取session时加载Connection
struts的datasource
web server的datasource
dbcp的datasource
3/ 事务Transaction 与 commit
一次事务只可以提交一次,多次提交会报错。
javax.servlet.ServletException: JDBC commit failed
4/ 一张表转换成了2个对象,修正为一个对象
4.1 修改*.hbm.xml,去除composite-id标签,将主键对应的key-property改为id,其它key-property改为property;
4.2 删除*.java和Abstract*.java,将*Id.java和Abstract*Id.java分别重构为*.java和Abstract*.java;
4.3 修改*DAO.jar,将findById的参数修正为主键的类型,注意与*.hbm.xml匹配。
修改前:
< hibernate-mapping >
< class name ="com.inc.xschool.entity.PositionInfo" table ="POSITION_INFO" schema ="dbo" catalog ="xschool" >
< composite-id name ="id" class ="com.inc.xschool.entity.PositionInfoId" >
< key-property name ="positionId" type ="java.lang.Long" >
< column name ="POSITION_ID" />
</ key-property >
< key-property name ="positionName" type ="java.lang.String" >
< column name ="POSITION_NAME" length ="50" />
</ key-property >
< key-property name ="custId" type ="java.lang.String" >
< column name ="CUST_ID" length ="50" />
</ key-property >
</ composite-id >
</ class >
</ hibernate-mapping >
修改后:
<hibernate-mapping>
<class name="com.inc.xschool.entity.PositionInfo" table="POSITION_INFO" schema="dbo" catalog="xschool">
<id name="positionId" type="java.lang.Long">
<column name="POSITION_ID" precision="2" scale="0" />
<generator class="assigned"></generator>
</id>
<property name="positionName" type="java.lang.String">
<column name="POSITION_NAME" length="50" />
</property>
<property name="custId" type="java.lang.String">
<column name="CUST_ID" length="50" />
</property>
</class>
</hibernate-mapping>
5/ 递增字段(整型)
5.1 Oracle <generator class="sequence">SEQ_NAME</generator>
5.2 MySQL <generator class="increment"/>
5.3 SQL SERVER <generator class="identity"/>
6/ MS SQL SERVER Exception
6.1 [Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes
jdbc bug,text字段的值设为了空或'',改成' '即可,2005中也许修正此bug。
6.2 [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.
在手工事务模式 (AutoCommit=false) 下,如果使用直接 (SelectMethod=direct) 模式,当您尝试对使用 JDBC 驱动程序的 SQL Server 数据库执行多个语句时,将会出现此问题。直接模式是该驱动程序的默认模式。
url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=whm;SelectMethod=cursor
6.3 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
客户端:10.170.10.2; WinXP SP2; SQL Server 2000(SP4)
服务端:10.170.10.3; Win2003 Server; SQL Server 2000(SP4)
1/ Microsoft SQL Server 2000 Driver for JDBC(Service Pack 1)
msbase.jar;mssqlserver.jar;msutil.jar
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url = "jdbc:microsoft:sqlserver://10.170.10.3:1433;DatabaseName=xschool";
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at com.inc.xchool.test.TestJDBC.main(TestJDBC.java:31)
2/ Microsoft SQL Server 2005 JDBC Driver
sqljdbc.jar
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
String url = "jdbc:sqlserver://10.170.10.3:1433;DatabaseName=xschool";
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection timed out: connect
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at com.inc.xchool.test.TestJDBC.main(TestJDBC.java:34)
3/ Win的数据源(ODBC),系统DSN
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
可以建立连接
解决方法:在10.3的防火墙设置中开通1433的TCP权限。
6.4 org.eclipse.core.internal.resources.ResourceException: A resource exists with a different case: /ok/hibernate.reveng.xml.
状况:新建了2个web项目,一个叫ok,一个叫okadmin,都添加了hibernate关联,后者反转数据库结构的时候,eclipse在.log中留下以上的log。
解决方法:临时remove另外一个项目。
6.5 ORA-01461 can bind a LONG value only for insert into a LONG column
状况:JDBC驱动与连接的Oracle数据库版本不一致。
解决方法:置换JDBC驱动为Oracle系统自带的。
posted on 2007-02-08 15:51
Xu Jianxiang 阅读(1793)
评论(1) 编辑 收藏 所属分类:
Open Source