Struts2 上傳圖片文件、ORA-01461 僅能綁定要插入 LONG 列的 LONG 值.docx_第1頁
Struts2 上傳圖片文件、ORA-01461 僅能綁定要插入 LONG 列的 LONG 值.docx_第2頁
Struts2 上傳圖片文件、ORA-01461 僅能綁定要插入 LONG 列的 LONG 值.docx_第3頁
Struts2 上傳圖片文件、ORA-01461 僅能綁定要插入 LONG 列的 LONG 值.docx_第4頁
Struts2 上傳圖片文件、ORA-01461 僅能綁定要插入 LONG 列的 LONG 值.docx_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

前天項(xiàng)目中需要用到一個(gè)圖片上傳的功能,本來以為就是一個(gè)簡(jiǎn)單的對(duì)文件對(duì)象的一個(gè)流操作,非常簡(jiǎn)單。但著手開始寫的時(shí)候才發(fā)現(xiàn),以前了解的文件的上傳和下載是基于Servlet實(shí)現(xiàn)對(duì)流文件的操作,本次項(xiàng)目中的控制器使用的Struts2,難道讓允許在眾多Action中夾雜上Servlet?即使我能做到這也不符合項(xiàng)目規(guī)約,記得以前在學(xué)習(xí)Struts2的時(shí)候提到過Struts2的幾個(gè)核心jar包中就包括文件上傳下載的jar包,但是從來沒有用過。第一直覺就是去查Struts2的官方文檔,但找了半天沒有找到Struts2的AIP,網(wǎng)上大多數(shù)都Struts2的API就是將Struts2的官方文檔轉(zhuǎn)換成了chm格式。知道了Struts2有個(gè)文件上傳下載的包,沒用過,本來很簡(jiǎn)單的東西瞬間又變成的很復(fù)雜的東西。又開始了在網(wǎng)上的尋找。不過功夫還是不負(fù)有心人,看了N多資料后。有了點(diǎn)自己小小的總結(jié)。Struts2提供的文件上傳下載確實(shí)唄簡(jiǎn)單。就以圖片上除為例子:核心代碼就 3 句,其他全是圍繞這3句核心代碼寫的,還有相應(yīng)的geter和seterJava代碼1. /1、得到圖片將要寫入的路徑2. StringrealPath=ServletActionContext.getServletContext().getRealPath(/images);/實(shí)際路徑也就是在tomcat的webapp下的路徑3. 如果使用String path= ServletActionContext.getServletContext().getContextPath();得到的就是你項(xiàng)目下的路徑了。不過還是推薦使用上一個(gè)Java代碼1. /2、創(chuàng)建一個(gè)在此路徑下的文件2. FilesaveFile=newFile(newFile(realPath),fileTestFileName);/在該實(shí)際路徑下實(shí)例化一個(gè)文件Java代碼1. /3、將上傳文件復(fù)制到以上實(shí)例化的文件中,這部可能會(huì)拋出異常需要捕獲2. FileUtils.copyFile(fileTest,saveFile);Java代碼1. packagecom.ibm.action;2. 3. importjava.io.File;4. importjava.io.IOException;5. 6. mons.io.FileUtils;7. importorg.apache.struts2.ServletActionContext;8. 9. importcom.opensymphony.xwork2.ActionSupport;10. 11. publicclassUploadextendsActionSupport12. privateFilefileTest;/接收這個(gè)上傳的文件13. privateStringfileTestFileName;/Struts2提供的格式,在文件名后+FileName就是上傳文件的名字此處千萬別再execute里面使用fileTest.getName();這個(gè)方法獲取的名字是Struts2幫你封裝好之后的一個(gè)文件名,一個(gè)tmp文件的文件名。14. publicFilegetFileTest()15. returnfileTest;16. 17. publicvoidsetFileTest(FilefileTest)18. this.fileTest=fileTest;19. 20. publicStringgetFileTestFileName()21. returnfileTestFileName;22. 23. publicvoidsetFileTestFileName(StringfileTestFileName)24. this.fileTestFileName=fileTestFileName;25. 26. 27. Override28. publicStringexecute()throwsException29. Stringstr=.jpg,.jpeg,.bmp,.gif;30. /限定文件大小是4MB31. if(fileTest=null|fileTest.length()4194304)32. returnimageError;33. 34. for(Strings:str)35. if(fileTestFileName.endsWith(s)36. StringrealPath=ServletActionContext.getServletContext().getRealPath(/images);/實(shí)際路徑37. FilesaveFile=newFile(newFile(realPath),fileTestFileName);/在該實(shí)際路徑下實(shí)例化一個(gè)文件38. /判斷父目錄是否存在39. if(!saveFile.getParentFile().exists()40. saveFile.getParentFile().mkdirs();41. 42. try43. /執(zhí)行文件上傳44. /FileUtils類名mons.io.FileUtils;45. /是commons-io包中的,commons-fileupload必須依賴commons-io包實(shí)現(xiàn)文件上次,實(shí)際上就是將一個(gè)文件轉(zhuǎn)換成流文件進(jìn)行讀寫46. FileUtils.copyFile(fileTest,saveFile);47. 48. catch(IOExceptione)49. returnimageError;50. 51. 52. 53. returnimageSuccess;54. 55. 56. ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值日志錯(cuò)誤信息:2012-02-21 15:42:11,928 DEBUG org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator - 2012-02-21 15:42:11,928 DEBUG org.springframework.jdbc.support.SQLStateSQLExceptionTranslator - 2012-02-21 15:42:11,945 INFO com.weihua.core.exception.ExceptionMappingInterceptor - org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL ; SQL state 72000; error code 1461;- The error occurred in ibatis/SqlMap/sql-System.xml.- The error occurred while applying a parameter map.- Check the .insert-InlineParameterMap.- Check the statement (update failed).- Cause: java.sql.SQLException: ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值; nested exception is mon.jdbc.exception.NestedSQLException:- The error occurred in ibatis/SqlMap/sql-System.xml.- The error occurred while applying a parameter map.- Check the .insert-InlineParameterMap.- Check the statement (update failed).- Cause: java.sql.SQLException: ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值初步懷疑是插入的值大于該字段數(shù)據(jù)類型約束的長(zhǎng)度導(dǎo)致。因?yàn)檫@個(gè)異常是指用戶向數(shù)據(jù)庫執(zhí)行插入數(shù)據(jù)操作時(shí),某條數(shù)據(jù)的某個(gè)字段值過長(zhǎng),如果是varchar2類型(最大長(zhǎng)度為4000字節(jié))的,當(dāng)長(zhǎng)度超過2000-4000(最大值)之間的時(shí)候,oracle會(huì)自動(dòng)將該字段值轉(zhuǎn)為long型的,插入操作失敗。解決辦法是:將此字段的類型改為clob或者blob類型;但是將oracle數(shù)據(jù)庫表中的varchar2類型直接改成clob類型會(huì)失敗,解決辦法如下:new 一個(gè)Sql view,執(zhí)行下列代碼:alter table table_name modify col_name long;alter table table_name modify col_name clob;在進(jìn)行此操作之前需要先備份表的數(shù)據(jù),然后清空表中的數(shù)據(jù),再修改表的字段屬性,最后將數(shù)據(jù)導(dǎo)入即可。注:clob不需指定長(zhǎng)度。1、插入到字符串長(zhǎng)度大于4000字節(jié)。2、插入到表中的記錄其中一個(gè)是long類型、還有其他實(shí)際長(zhǎng)度大于2000個(gè)字節(jié)(如果是 UTF-8,則是1333個(gè)字節(jié));或者是插入的記錄中有兩個(gè)或兩個(gè)以上長(zhǎng)度大于2000字節(jié)的字符串 。用以下SQL可以查出有可能引起ORA-01461錯(cuò)誤的表:SELECT * FROM(SELECT TABLE_NAME, OWNER, count(*) NUMFROM DBA_TAB_COLUMNSWHERE DATA_TYPE=LONGOR ( DATA_TYPE=VARCHAR2or DATA_TYPE=CHARor DATA_TYPE=NVARCHAR2or DATA_TYPE=NCHAR)AND DATA_LENGTH 1333)AND OWNER NOT IN(SYS,SYSTEM,SH,OLAPSYS,MDSYS,WKSYS,ORDSYS,CTXSYS,ODM,XDB,WMSYS,APEX_030200,EXFSYS,SYSMAN,ORDDATA)GROUP BY TABLE_NAME, OWNER)WHERE NUM 1;關(guān)于錯(cuò)誤的其他原因:當(dāng)向ORACLE數(shù)據(jù)庫中插入或更新數(shù)據(jù)時(shí),報(bào)錯(cuò)“ORA-01461: 僅可以為插入 LONG 列的 LONG 值賦值”,可能有以下幾種原因:1、插入到字符串長(zhǎng)度大于4000字節(jié)。2、插入到表中的記錄的某個(gè)字段數(shù)據(jù)的實(shí)際長(zhǎng)度大于2000個(gè)字節(jié)(如果是UTF-8,則是1333個(gè)字節(jié));或者是插入的記錄中有兩個(gè)或兩個(gè)以上長(zhǎng)度大于2000字節(jié)的字符串。3、數(shù)據(jù)庫與客戶端的JDBC 驅(qū)動(dòng)不匹配。對(duì)于UTF-8或歐洲的某些字符集,oracle在存儲(chǔ)時(shí),對(duì)于一個(gè)字符需要2個(gè)或3個(gè)字節(jié)的存儲(chǔ)空間,雖然

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論