全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2946
推到 Plurk!
推到 Facebook!

JSP+Oracle 資料輸出少了好幾筆?

答題得分者是:neoart
b7307024
一般會員


發表:9
回覆:21
積分:6
註冊:2005-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-02 18:53:18 IP:220.135.xxx.xxx 訂閱
各位大大好!小弟最近在做jsp+oracle,而原本的jsp+sqlserver
可以輸出資料7百多筆,現在資料庫改成oracle後
結果資料只能輸出2百多筆
且sqlserver的資料是有照順序跑的,如:DocID 1~738
但匯到oracle的資料卻沒有照順序跑,如:DocID 300~380,1~298,381~738
我則是用 Select * From FieldType1 Order by DocID ASC 才可以正常輸出
但是卻只能輸出2百多筆資料
請問各位大大這是怎麼回事呢?
編輯記錄
b7307024 重新編輯於 2007-05-02 18:57:52, 註解 無‧
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-02 20:15:31 IP:220.132.xxx.xxx 訂閱
請問你的driver型態及oracle版本及createStatement的參數為何?
(也就是你的jdbc的設定是怎麼設的)
b7307024
一般會員


發表:9
回覆:21
積分:6
註冊:2005-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-02 23:10:58 IP:220.132.xxx.xxx 訂閱
謝謝大大的回覆!以下是我的程式碼設定:
1.driver型態
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:peter","user","user");
2.oracle版本------9i
3.createStatement參數------沒帶任何參數,如下:
Statement smt = con.createStatement();

我用的jdbc driver是我去灌好的oracle資料夾找到來用的,名稱叫ojdbc14.jar,不是去網路上下載下來用的
因為找不到可以合乎jdk 1.5版本,本想說不能用,結果可以連接且抓到資料,但是卻發生只能抓到少數資料的情況
不知道該如何解決說!

neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-02 23:31:32 IP:220.132.xxx.xxx 訂閱
1.到oracle的JDBC單元,下載driver   http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
2.copy 你所下載的JDBC jar檔 到  server/default/lib目錄之下

3.Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
statement的參數要改一下

4.我記得tomcat有DataSource的jndi設定,何不把connection的存活給DataSource Connection Pool去決定?
這樣對你的效能比較有幫忙哦
http://tomcat.jaxwiki.org/jndi-datasource-examples-howto.html
編輯記錄
neoart 重新編輯於 2007-05-02 23:36:40, 註解 無‧
b7307024
一般會員


發表:9
回覆:21
積分:6
註冊:2005-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-03 10:21:02 IP:220.135.xxx.xxx 訂閱
謝謝大大的回覆!針對你的回覆我的作了以下的動作:
1.我的資料庫是Oracle9i 9.2.0.1於是我去下載了Oracle9i 9.2.0.1 JDBC Driver,檔名是ojdbc14.jar,網站上是寫For use with JDK 1.4,但我的jdk是1.5,不知道這樣是不是有關係呢?
2.我把下載好的ojdbc14.jar分別放到Tomcat 5.5\common\lib及Tomcat 5.5\server\lib。
3.我把這ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE參數加到createStatement()裡面
P.S:ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE的意思是什麼呢?

做了以上的動作以後,還是只抓到200多筆資料,於是我在想10g的jdbc好像有for jdk1.5版的
但最後還是只抓到200多筆資料,請問大大該如何解決呢?
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-03 10:33:14 IP:61.64.xxx.xxx 訂閱
真歹勢
我只有用到oracle 8.1.7 & JDK1.4.2
不過你要不要花點時間安裝一下jdk1.4.2來試看看?
(最多不過是改一下JAVA_HOME參數,不是嗎?)
有人說是要用把oracle的classesXXX.zip也放進去,我想這倒是可以試看看
Statement的參數改用為 "ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE"
看看吧
編輯記錄
neoart 重新編輯於 2007-05-03 10:47:25, 註解 無‧
b7307024
一般會員


發表:9
回覆:21
積分:6
註冊:2005-07-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-04 09:51:26 IP:220.135.xxx.xxx 訂閱
謝謝大大的回覆!我解決了!
差別在jsp oracle底下,需要加上檢查欄位是否為null的程式碼
如下:
<textarea cols="60" rows="10" class="java" name="code"> docid = rs.getInt("DocID"); name = rs.getString("FieldName1"); if(name == null){ name = ""; } passport = rs.getString("FieldName3"); if(passport == null){ passport = ""; } birth = rs.getDate("FieldName4"); schedul = rs.getString("FieldName6"); if(schedul == null){ schedul = ""; } indate = rs.getDate("FieldName5"); add_tmp = rs.getString("FieldName7"); address = ""; if(add_tmp != null){ address = add_tmp.replaceAll("郵遞區號",""); } </textarea>
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-04 10:33:00 IP:61.64.xxx.xxx 訂閱
所以你的列出只有200筆資料,意是指你處理過後的資料
而非原本resultset.net所列出的資料量囉?
b7307024
一般會員


發表:9
回覆:21
積分:6
註冊:2005-07-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-05-07 09:51:27 IP:220.135.xxx.xxx 訂閱
是啊!謝謝大大的回覆!
我後來用getRow()下去查resultset的資料到底有多少
結果是我要的資料數沒錯
但起初想說換個資料庫應該不會有這種差別才對
就沒懷疑資料有null會出現exception
但後來一直查查查
就知道是要多加上檢查null的程式碼才可以正確抓到資料
我猜大慨是sqlserver轉oracle時
原本sqlserver是空值且是字串型態的欄位
到了oracle會自動加上null才會導致程式出錯(Date型態的不會)。
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-05-07 10:19:45 IP:61.64.xxx.xxx 訂閱
所以下次你要不要先寫個小元件去逐步debug?再發問呢?
(當然我的技術/經驗不夠,讓你花太多時間,也是我的不對,所以我也不敢"請栽"結案)
資料庫百百款,千萬別預設結果
最好就是先把你的元件切的清楚,
debug時,分開元件debug,大家會比較省事.
b7307024
一般會員


發表:9
回覆:21
積分:6
註冊:2005-07-31

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-05-07 21:42:17 IP:220.132.xxx.xxx 訂閱
呵呵!大大不會拉!你的答覆是我想繼續解問題的動機
且相信能夠在這個程式設計聖地之一的論談當上版主
能力也不會差到哪去!謝謝大大拉!
系統時間:2024-05-05 19:18:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!