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 閱讀(1821)
評論(1) 編輯 收藏 所屬分類:
Open Source