1/ 數(shù)據(jù)庫驅(qū)動(dòng)
1.1/ Oracle
jdbc驅(qū)動(dòng)需要注意版本,class111.jar;o_jdbc.jar。
1.2/ MS SQL Server
注意版本和網(wǎng)絡(luò)配置(tcp和管道的權(quán)限)。
官方驅(qū)動(dòng):2000,3個(gè)jar包;2005,一個(gè)jar包。
jrds驅(qū)動(dòng):評(píng)價(jià)普遍比官方的好,注意各個(gè)版本。
1.3/ MySQL
2/ 數(shù)據(jù)庫連接/session
2.1/ hibernate.cfg.xml配置jdbc驅(qū)動(dòng)
2.2/ hibernate.cfg.xml配置datasource
2.3/ 在獲取session時(shí)加載Connection
struts的datasource
web server的datasource
dbcp的datasource
3/ 事務(wù)Transaction 與 commit
一次事務(wù)只可以提交一次,多次提交會(huì)報(bào)錯(cuò)。
javax.servlet.ServletException: JDBC commit failed
4/ 一張表轉(zhuǎn)換成了2個(gè)對(duì)象,修正為一個(gè)對(duì)象
4.1 修改*.hbm.xml,去除composite-id標(biāo)簽,將主鍵對(duì)應(yīng)的key-property改為id,其它key-property改為property;
4.2 刪除*.java和Abstract*.java,將*Id.java和Abstract*Id.java分別重構(gòu)為*.java和Abstract*.java;
4.3 修改*DAO.jar,將findById的參數(shù)修正為主鍵的類型,注意與*.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字段的值設(shè)為了空或'',改成' '即可,2005中也許修正此bug。
6.2 [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.
在手工事務(wù)模式 (AutoCommit=false) 下,如果使用直接 (SelectMethod=direct) 模式,當(dāng)您嘗試對(duì)使用 JDBC 驅(qū)動(dòng)程序的 SQL Server 數(shù)據(jù)庫執(zhí)行多個(gè)語句時(shí),將會(huì)出現(xiàn)此問題。直接模式是該驅(qū)動(dòng)程序的默認(rèn)模式。
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: 到主機(jī) 的 TCP/IP 連接失敗。
客戶端:10.170.10.2; WinXP SP2; SQL Server 2000(SP4)
服務(wù)端: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: 到主機(jī) 的 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的數(shù)據(jù)源(ODBC),系統(tǒng)DSN
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
可以建立連接
解決方法:在10.3的防火墻設(shè)置中開通1433的TCP權(quán)限。

6.4 org.eclipse.core.internal.resources.ResourceException: A resource exists with a different case: /ok/hibernate.reveng.xml.
狀況:新建了2個(gè)web項(xiàng)目,一個(gè)叫ok,一個(gè)叫okadmin,都添加了hibernate關(guān)聯(lián),后者反轉(zhuǎn)數(shù)據(jù)庫結(jié)構(gòu)的時(shí)候,eclipse在.log中留下以上的log。
解決方法:臨時(shí)remove另外一個(gè)項(xiàng)目。
6.5 ORA-01461 can bind a LONG value only for insert into a LONG column
狀況:JDBC驅(qū)動(dòng)與連接的Oracle數(shù)據(jù)庫版本不一致。
解決方法:置換JDBC驅(qū)動(dòng)為Oracle系統(tǒng)自帶的。
posted on 2007-02-08 15:51
Xu Jianxiang 閱讀(1819)
評(píng)論(1) 編輯 收藏 所屬分類:
Open Source