JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » JDBC/SQL討論區 » JDBC 應用  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
己加入精華區
by koji at 2008-10-31 11:33
本主題所含的標籤
無標籤
作者 請問,怎樣做寫入的資料交易,而且還可以進行讀取 [精華]
dcage123





發文: 117
積分: 0
於 2008-10-30 16:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟用java寫了個常駐程式去寫入mysql
不過因為java是5秒寫入資料庫一次
所以我本來是用setAutoCommit(false)的方式
(因為本來我發現,如果我強制關閉執行視窗,寫入資料庫的資訊就被砍半了)

可是這樣子
其他有AP端的要讀取這個資料庫,確沒有辦法,一定要等他Commit
(因為我WEB端也要即時去抓這資料庫更新的資料)

請問還有哪種方式
可以保障資料的完整性
而且也不會影響AP端連進資料庫的問題^^

謝謝


reply to postreply to post
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:dcage123]
ajax

Thiago Alves



發文: 675
積分: 3
於 2008-10-30 17:17 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
setAutoCommit(false) >> setAutoCommit(true)

reply to postreply to post
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:ajax]
dcage123





發文: 117
積分: 0
於 2008-10-30 17:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
ajax wrote:
setAutoCommit(false) >> setAutoCommit(true)

用setAutoCommit(true)的話
就不能保障資料的完整性了

我的JAVA是用迴圈的方式撈XML的資訊
把資料庫清空
再將資料存入資料庫
可能會有100筆~500筆都有可能
所以跑500個迴圈...老實說滿廢時的
然後途中如果不小心將視窗關閉...那大概存到299就停住
這樣資料庫裡面只有299筆資料
這樣資料就不完整了.....

所以得用到setAutoCommit(false)

不過同時我另一個程式也得對該資料表進行讀取動作....@@


reply to postreply to post
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:dcage123]
jimmy14

Give me J-Power !



發文: 787
積分: 3
於 2008-10-30 18:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
試試將 java 程式讀到的資料填到另一個 table,
再用 stored procedure 將此 table update 到實際的 table.


reply to postreply to post
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:jimmy14]
dasamsu





發文: 26
積分: 1
於 2008-10-30 18:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
有二個疑問:

1. 這支常駐程式即使中斷, 為何資料會"砍半", 若沒commit,
MySQL應會自動rollback才對啊.

2. "即時去抓這資料庫更新的資料"
MySQL的transation, 可以做到record lock,
也就是說多人在update同一筆才會lock, 若一人在update,
其他人都可以正常select啊, 包括connect DB.


dasamsu edited on 2008-10-30 19:44
reply to postreply to post
Linux+JAVA+MySQL+二次開發, 新~支援 PostgreSQL, MSSQL
RIA流通系統(買賣業,POS,PDA..) http://www.awanx.com
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:dasamsu]
dcage123





發文: 117
積分: 0
於 2008-10-31 09:50 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
dasamsu wrote:
有二個疑問:

1. 這支常駐程式即使中斷, 為何資料會"砍半", 若沒commit,
MySQL應會自動rollback才對啊.

2. "即時去抓這資料庫更新的資料"
MySQL的transation, 可以做到record lock,
也就是說多人在update同一筆才會lock, 若一人在update,
其他人都可以正常select啊, 包括connect DB.

被我之前是沒有做setAutoCommit(false)所以才被砍半@@

不過這資料表就像一個清單檔
我的運行方式是

================
清空資料表
FOR(到XML的最尾巴) {
S.executeUpdate(INSERT一筆資料到資料庫)
}
================

這種方式
所以如果剛好在迴圈中強制關閉視窗的話就砍半了...

那請問record lock這個方式可以解決我目前的問題嗎?@@
因為現在大概只有常駐程式會佔據那些資料表
其他都只需要做讀取的動作就好了^^


reply to postreply to post
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:dcage123]
dasamsu





發文: 26
積分: 1
於 2008-10-31 11:00 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你的意思是:

1.有一支程式會將table的資料筆一個批次,
用trans寫入, 整個必需要一起成功.
2.另有一支程式, 會立即去讀取這個table
已經寫入的資料筆, 可能前一支程式還在insert中.

是不是這樣?

若是我理解的這樣, MySQL可以處理啊.

1. 工作的資料表, 要確定是為InnoDB表.
2. insert的transation, 要在connection設定,
setAutoCommit(false);
setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

這樣做就可以了, 祝好運.


reply to postreply to post
Linux+JAVA+MySQL+二次開發, 新~支援 PostgreSQL, MSSQL
RIA流通系統(買賣業,POS,PDA..) http://www.awanx.com
作者 Re:請問,怎樣做寫入的資料交易,而且還可以進行讀取 [Re:dasamsu]
dcage123





發文: 117
積分: 0
於 2008-10-31 11:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
dasamsu wrote:
你的意思是:

1.有一支程式會將table的資料筆一個批次,
用trans寫入, 整個必需要一起成功.
2.另有一支程式, 會立即去讀取這個table
已經寫入的資料筆, 可能前一支程式還在insert中.

是不是這樣?

若是我理解的這樣, MySQL可以處理啊.

1. 工作的資料表, 要確定是為InnoDB表.
2. insert的transation, 要在connection設定,
setAutoCommit(false);
setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

這樣做就可以了, 祝好運.


setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
原來就差這行設定...囧
結果整個表被鎖住
謝謝^^||


reply to postreply to post
» JWorld@TW »  JDBC/SQL討論區 » JDBC 應用

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8