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

» JWorld@TW » JDBC/SQL討論區 » Microsoft SQL Server  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 資料寫入資料庫時出現陳述式已經結束
gfyy0827





發文: 54
積分: 0
於 2008-11-25 17:47 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
各位大大好,

我剛接觸JSP語言不久,

目前用JAVASCRIPT寫了一個線上Webedior,

但是由於文案內容會很多,因此我在資料庫設了三個欄位,欄位型態都為varchar 8000

這樣代表說我可以寫入共12000個中英文字(包含空白、段落)

但是我發現超過一定的字數後,就會出現(沒有超過就會存取正常)

2008/11/25 下午 05:33:57 org.apache.catalina.core.StandardWrapperValve invoke
嚴重的: Servlet.service() for servlet jsp threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]陳述式已經結束。
  at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
  at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
  at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processInfoToken(Unknown Source)
  at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
  at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
  at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
  at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
  at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
  at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
  at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
  at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
  at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
  at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)
  at org.apache.jsp.test.Manage.Charge.ChargeModifyProcess_jsp._jspService(ChargeModifyProcess_jsp.java:252)
  at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
  at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:124)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
  at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
  at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
  at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
  at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
  at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
  at java.lang.Thread.run(Unknown Source)

程式碼的判斷我是這樣判斷的...

String ChargeContent = rf.getParameter("content");
if (ChargeContent.length()>4000){
  if (ChargeContent.length()<=8000){
    ChargeContent1 = ChargeContent.substring(0,4000);
    ChargeContent2 = ChargeContent.substring(4000,ChargeContent.length());
  }else{
    ChargeContent1 = ChargeContent.substring(0,4000);
    ChargeContent2 = ChargeContent.substring(4000,8000);
    ChargeContent3 = ChargeContent.substring(8000,ChargeContent.length());
  }
}

prepStmt = Conn.prepareStatement("UPDATE Charge SET ChargeName = ? ,ChargeContent = ?,ChargeContent2 = ?, ChargeContent3 = ?, ModifyDate = ?, Modifier = ? WHERE ChargeID = ?");
prepStmt.setString(1,ChargeName);
prepStmt.setString(2,ChargeContent1);
prepStmt.setString(3,ChargeContent2);
prepStmt.setString(4,ChargeContent3);
prepStmt.setString(5,CreateDate);
prepStmt.setString(6,Name);
prepStmt.setString(7,ChargeID);
prepStmt.executeUpdate();


可是我用WORD統計字數並沒有超過12000呀...

頁數 7
字數 1915
字元數(不含空白) 5872
字元數(含空白) 6284
段落數 1
行數 256
半形字 444
全形字 1471

為何還會出現錯誤呢@@?

我的資料庫是MS SQL,麻煩大大了><

我找了一個下午了Sad


reply to postreply to post
Programmer是條不歸路。
http://www.wretch.cc/blog/etchen
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
yahoo1234tw





發文: 668
積分: 0
於 2008-11-25 19:36 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就是Java,什麼叫"JSP語言"

reply to postreply to post
專業的職業演員不會站在路邊演白戲,但是這裡有很多以寫程式為業的人很喜歡作賤自己跟別人,沒事就免費幫一些懶學生寫作業。
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
dennisma





發文: 25
積分: 0
於 2008-11-25 19:41 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
設8000為什麼會是可以輸入12000個字

reply to postreply to post
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
gfyy0827





發文: 54
積分: 0
於 2008-11-26 00: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
To yahoo1234tw

原諒小女子沒有很了解...
因為剛接觸不久^^
真不好意思..

To dennisma

我是前台有一個iframe,
後端資料表我是設三個欄位來儲存這個iframe裡面的值(HTML語法一個欄位不夠存)
這三個欄位我個別都設VARCHAR 8000,
所以前台的iframe共可輸入12000的字,
我後端把iframe的值分作三塊來儲存...

但是我輸入到大約6049字儲存的時候就會出現陳述式錯誤的訊息

6048字是儲存成功,
只要超過大約6049字就會失敗。

也不知道是什麼原因...


reply to postreply to post
Programmer是條不歸路。
http://www.wretch.cc/blog/etchen
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
drinkin





發文: 46
積分: 0
於 2008-11-26 08:18 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
有在db直接下sql測看看你要執行的sql語法能正常執行嗎?
欄位拆成3個欄位有什麼特別的考量嗎?


drinkin edited on 2008-11-26 08:21
reply to postreply to post
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
gfyy0827





發文: 54
積分: 0
於 2008-11-26 09:26 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
To drinkin

拆成三個欄位主要是因為前端輸入的值(HTML語法)大於一個欄位的值,
所以我把前端的值拆成三塊個別儲存。

SQL語法是正常的,
如果不超過6XXX個字,第一和第二個欄位會正常儲存..

但只要超過6XXX個字就會出現陳述式錯誤了~


reply to postreply to post
Programmer是條不歸路。
http://www.wretch.cc/blog/etchen
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
ethan_victory





發文: 49
積分: 0
於 2008-11-26 09:45 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中的文字字串,有無單引號或雙引號之符號
2. JSP頁面 & TABLE 都是UTF8 encoding的話,一個中文字,可能會是佔3 bytes
所以試試,增加一個test01 varchar(6)的欄位, 看它能寫幾個中文字進去


reply to postreply to post
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
gfyy0827





發文: 54
積分: 0
於 2008-11-26 10:45 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
剛剛用QUERY建立一個相同的資料表,

CREATE TABLE [dbo].[Charge] (
  [ChargeID] [int] NOT NULL ,
  [ChargeName] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
  [ChargeContent] [varchar] (8000) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
  [ChargeContent2] [varchar] (8000) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
  [ChargeContent3] [varchar] (8000) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
  [ModifyDate] [datetime] NULL ,
  [Modifier] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
  [msrepl_tran_version] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
GO


但出現...

警告: 雖已建立資料表 'Charge1',但其最大資料列的大小 (24159) 已超過單列所允許的最大位元組數目 (8060)。如果在此資料表中 INSERT 或 UPDATE 資料行而會導致資料列長度超過 8060 位元組時,則會導致 INSERT 或 UPDATE 失敗。


難道是這個原因嗎= =?

MS SQL 2000會有這個限制嗎??Sad


reply to postreply to post
Programmer是條不歸路。
http://www.wretch.cc/blog/etchen
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2008-11-26 11:02 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
yes~

http://support.microsoft.com/kb/260418

http://msdn.microsoft.com/en-us/library/ms186981.aspx

http://msdn.microsoft.com/en-us/library/ms178158.aspx

所以看來換2005, 2008 ?或是乖乖換欄位格式囉?

koji


koji edited on 2008-11-26 11:34
reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
gfyy0827





發文: 54
積分: 0
於 2008-11-26 12:32 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
感謝Koji大大~

我現在要try看看用text格式來儲存看看~


reply to postreply to post
Programmer是條不歸路。
http://www.wretch.cc/blog/etchen
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
gfyy0827





發文: 54
積分: 0
於 2008-11-26 15:04 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
我目前將欄位格式以ntext來儲存,

但友人跟我說如果設成ntext,

在where like和=查詢時會有問題,

不知道各位大大在儲存html時,都會以哪種格式來做儲存?


reply to postreply to post
Programmer是條不歸路。
http://www.wretch.cc/blog/etchen
作者 Re:資料寫入資料庫時出現陳述式已經結束 [Re:gfyy0827]
simontiis





發文: 28
積分: 0
於 2008-12-10 16:42 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
像你這樣的需求,會用ntext來處理,
如果想搜尋,請用sql server全文檢索的功能,
上google上找一下吧


reply to postreply to post
» JWorld@TW »  JDBC/SQL討論區 » Microsoft SQL Server

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