1. 程式人生 > >2014-J2EE開發工作中遇到的異常問題及解決方法總結

2014-J2EE開發工作中遇到的異常問題及解決方法總結

本人做了近三年的J2EE開發工作,主要架構為SSH+MySQL+Tomcat,專案中也用到了一些第三方的開源工具或者中介軟體,工作中難免會遇到各種各樣的異常問題,對於一些給我造成比較大的麻煩的問題,我習慣將他們和解決方案記錄下來,以免下次遇到時再次東搜西找。這些問題有些可能並不是多難的技術問題,而只是容易被我們忽略而不易察覺的小問題,但是正因為不易察覺,它們往往會耗費我們比較多的時間,這點我相信很多同行都會有同感,因此,我覺得這個習慣相當有用,建議做開發的朋友都有一個自己的異常記錄,並能夠分享出來,惠及大家。以下是我工作中遇到過的一些異常,共36種:

1.    HttpClient I/O exception:

錯誤資訊I/O exceptioncaught when processing request:Connection timed out:connect

錯誤原因:IP不正確。

解決方法:改正IP

2.    Ambiguous handler methods mapped

錯誤資訊:java.lang.IllegalStateException: Ambiguoushandler methods mapped for HTTP path '/lowpressure.json'

Ambiguous:模糊不清的,有歧義的

錯誤原因:專案中存在兩個相同的RequestMapping路徑

解決方法:修改其中一個名稱

3.    session read-only

錯誤資訊:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO orremove 'readOnly' marker from transaction definition.

錯誤原因:開啟了openSessionInViewFilter,而這種session的預設模式是隻讀。

解決方法:為其設定初始化引數singleSession=false。

<init-param>

              <param-name>singleSession</param-name>

              <param-value>false</param-value>

    </init-param>

4.    org/hibernate/exception/DataException

錯誤資訊:

javax.servlet.ServletException:java.lang.NoClassDefFoundError:org/hibernate/exception/DataException

Caused by: java.lang.NoClassDefFoundError:org/hibernate/exception/DataException

解決方法:關閉openSessionInViewFilter

5.    Initializing connection provider:

Tomcat啟動時長時間停留在此處

原因:不明!

解決方法:自愈!

錯誤資訊:

highcharts畫趨勢圖時firebug捕捉到異常!

錯誤原因:highchairs官網給出原因

Rendering div not found

This error occurs if the chart.renderTo option ismisconfugured so that Highcharts is unable to find the HTML element to renderthe chart in.

解決方法:配置chart.renderTo為一個存在的div的id。

7.    C3p0獲取連線失敗

錯誤原因:客戶端從連線池中獲取連線超時,通常是因為連線池中連線達到最大數量,且都被取走還未歸還,出項這一現象的原因有兩種:一是連線最大數配置過小不夠併發使用,二是程式中存在連線洩露,有使用後未歸還處。

解決方法:排查有無連線未close,若沒有則增加最大連線數量!

8.    org.hibernate.NonUniqueObjectException

錯誤資訊:a differentobject with the same identifier value was already associated with the session:

錯誤原因:這個錯誤產生原因是因為在hibernate中同一個session裡面有了兩個相同標識但是不同實體的物件.比如通過hibernate從資料庫中查出一個物件A,有手動new了一個新的物件B,並且付給B與A相同的識別符號,再通過hibernate儲存B,這樣就在session裡同時存在A和B這兩個相同識別符號但不同的物件。

解決方法:方法1,儲存B之前,呼叫一下session.clear(),清空一下當前session,但此方法不適合在一次需要儲存多個物件時,不推薦使用!

方法2,在儲存B之前,清除一下session中A物件,只清除A物件,呼叫session.evict(A)即可;

方法3,通過呼叫session.merge(B),這樣會用B去更新庫中的A,但不會把B持久化,session中就不會同時存在A和B

方法4,把B物件的屬性值都set到A中,然後還儲存A即可。

幾種方法根據業務需要選擇使用,如無特殊需要,推薦採用第三種方法。

9.    doesnot contain handler parameter named 'method'

錯誤資訊:Request[/patientSelfAction] does not contain handlerparameter named 'method'.  This may becaused by whitespace in the label text.

10.          Socket異常1:Address already in use: JVM_Bind

該異常發生在伺服器端進行new ServerSocket(port)(port是一個0,65536的整型值)操作時。異常的原因是以為與port一樣的一個埠已經被啟動,並進行監聽。此時用netstat –an命令,可以看到一個Listending狀態的埠。只需要找一個沒有被佔用的埠就能解決這個問題。

11.          Socket異常2: Connection refused: connect

該異常發生在客戶端進行new Socket(ip, port)操作時,該異常發生的原因是或者具有ip地址的機器不能找到(也就是說從當前機器不存在到指定ip路由),或者是該ip存在,但找不到指定的埠進行監聽。出現該問題,首先檢查客戶端的ip和port是否寫錯了,如果正確則從客戶端ping一下伺服器看是否能ping通,如果能ping通(服務伺服器端把ping禁掉則需要另外的辦法),則看在伺服器端的監聽指定埠的程式是否啟動,這個肯定能解決這個問題。

12.          Socket異常3: Socket is closed

該異常在客戶端和伺服器均可能發生。異常的原因是己方主動關閉了連線後(呼叫了Socket的close方法)再對網路連線進行讀寫操作。 

13.          Socket異常4: Connection reset

該異常在客戶端和伺服器端均有可能發生,引起該異常的原因有兩個,第一個就是如果一端的Socket被關閉(或主動關閉或者因為異常退出而引起的關閉),另一端仍傳送資料,傳送的第一個資料包引發該異常(Connect reset by peer)。另一個是一端退出,但退出時並未關閉該連線,另一端如果在從連線中讀資料則丟擲該異常(Connection reset)。簡單的說就是在連線斷開後的讀和寫操作引起的。

14.          Socket異常5: Broken pipe

該異常在客戶端和伺服器均有可能發生。在第4個異常的第一種情況中(也就是丟擲SocketExcepton:Connect reset by peer:Socket write error後),如果再繼續寫資料則丟擲該異常。前兩個異常的解決方法是首先確保程式退出前關閉所有的網路連線,其次是要檢測對方的關閉連線操作,發現對方關閉連線後自己也要關閉該連線。

15.          檢視轉儲為sql後無法匯入

使用navicat工具匯出資料庫為sql檔案後,其中檢視的sql語句中有以下內容:

DROP VIEW IF EXISTS `bloodpressure`;

CREATE ALGORITHM=UNDEFINEDDEFINER=`root`@`` SQL SECURITY DEFINER VIEW `bloodpressure` AS....

其中DEFINER的值中@後面應該是資料庫所在主機的IP地址,通過視覺化工具建立連線後執行sql語句的話,可以直接使用localhost或者127.0.0.1即可,即DEFINER=`root`@`localhost`

16.          完全解除安裝MySQL

由於各種原因需要重灌MysSQL,通常會遇到原來的配置資訊解除安裝不乾淨而引起重灌失敗的現象。那麼如何才能確保MySQL解除安裝乾淨呢?如果你是通過控制面板的“新增和刪除程式”來解除安裝MySQL的話,那麼你還需要進行以下兩步操作:

1、刪除原資料資訊,即刪除C:\Documents and Settings\All Users\Application Data路徑下的MySQL資料夾,有時改資料夾可能被隱藏,通過選擇“工具”下的“資料夾選項”,點選“檢視”,選擇“隱藏檔案和資料夾”下的“顯示所有檔案和資料夾”,就可以顯示出來了。

2、刪除登錄檔資訊,執行regedit命令,以此展開,刪除裡面的MySQL資料夾,有幾個地方:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL

17.          java.lang.OutOfMemoryError:Java heap space

引起java.lang.OutOfMemoryError: Java heap space異常,可能是由JAVA的堆疊設定太小的原因

在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將丟擲此異常資訊。

JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定.JVM在啟動的時候會自動設定Heap size的值,其初始空間(即-Xms)是實體記憶體的1/64,最大空間(-Xmx)是實體記憶體的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設定。

根據網上的答案大致有以下三種解決方法:

1、在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms200m-Xmx512m

注意:只有startup.bat啟動tomcat,設定才能生效,如果利用windows的系統服務啟動tomcat服務,上面的設定就不生效了就是說set JAVA_OPTS=-Xms200m -Xmx512m沒起作用

              

2、在Eclilpse中修改啟動引數,在VM arguments加入了-Xms200m -Xmx512m,設定如下圖所示

3、  可以在windows 更改系統環境變數,加上JAVA_OPTS=-Xms64m-Xmx512m

18.          webService 異常:The endpoint reference (EPR) for the Operation not found is :

The endpoint reference (EPR) for the Operation not found is/EMRServer/services/BloodpressureService/getBloodpressure

錯誤原因:找不到資源。可能是service名稱不存在,或者方法名稱錯誤等原因

19.          org.apache.axis2.deployment.DeploymentException

最近在做axis2,開始執行正常,今天加入spring AOP 後,出現下面的異常

org.apache.axis2.deployment.DeploymentException:The following error occurred during schema generation:

 Unable to load bytecode for classcom.cmcc.emr.common.Controller.BloodpressureController$$EnhancerByCGLIB$$39228aa1

網上找資料看了之後,發現是由於axis2不能參與事務管理,而我的寫的service又剛好符合pointcut,所以報錯了,後來把pointcut改寫了一下,就不會報錯了,

結論:service服務不能配置為切入點。

20.          Sql語句優化(巢狀子查詢)

Sql in 語句 效率奇低(ExecutionTime : 24 s)

SELECT phone FROM runmessage WHERE encounterDatetime IN (SELECT MAX(encounterDatetime) FROM runmessageWHERE DATE(encounterDatetime)='2013-07-19' GROUPBY email) ORDER BY steps DESC LIMIT 0,10;

優化後:效果顯著(Execution Time : 3 s)

SELECT * FROM (SELECT MAX(encounterDatetime) ASencounterDatetime,phone,steps,email FROM runmessage WHEREDATE(encounterDatetime)='2013-07-19' GROUPBY email) AS tempMessage ORDER BY tempMessage.steps DESC LIMIT 0,10;

21.          registered the JDBC driver butfailed to unregister it

Tomcat關閉時報出警告:

嚴重: The webapplication [/EMRServer] registered the JDBC driver [com.mysql.jdbc.Driver] butfailed to unregister it when the web application was stopped. To prevent amemory leak, the JDBC Driver has been forcibly unregistered.

原因未知。

22.          Caused by:java.lang.NoClassDefFoundError: org/hibernate/exception/DataException

錯誤原因:hibernate通過Hql語句進行資料庫操作時,hql語句中的欄位拼寫錯誤,導致無法識別,報出此異常。比如,如果from後面寫的是實體類名,後面的欄位就必須是類的屬性,而不能是表字段的名稱。切記!!!

23.          IllegalStateException: Couldnot find @PathVariable [startTime] in @RequestMapping

異常資訊:org.springframework.web.util.NestedServletException:

Request processing failed; nested exceptionisorg.springframework.web.bind.annotation.support.HandlerMethodInvocationException:Failed to invoke handler method [publicorg.springframework.web.servlet.ModelAndViewcom.cmcc.emr.restful.Controller.BloodSugarController.findBloodsugar(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)throws java.lang.Exception]; nested exception isjava.lang.IllegalStateException:Could not find@PathVariable[startTime] in @RequestMapping

      org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)

       org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)

       javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

       javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

       com.cmcc.emr.Util.LoginFilter.doFilter(LoginFilter.java:27)

org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

       org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

錯誤原因:

最近在使用restful規範實現webService,發現這個非常奇怪的異常!明明存在@PathVariable[startTime]這個引數,但卻一直報:Couldnot find!

兩個介面如下:

Post介面:

@RequestMapping(method=RequestMethod.POST, value="/bloodSugars/{idcard}/{encounterDatetime}/{beforemeal}/{aftermeal}/{appType}")

    public void insertBloodSugar(@PathVariable String idcard,@PathVariable StringencounterDatetime,

           @PathVariable String beforemeal,@PathVariable String aftermeal,@PathVariable StringappType,

           HttpServletRequestrequest,HttpServletResponse response) throws Exception{

}

Get介面:

@RequestMapping(method=RequestMethod.GET, value="/bloodSugars/{idcard}/{startTime}/{endTime}/{startNum}/{offset}")

    public ModelAndView findBloodsugar(@PathVariable String idcard,@PathVariable StringstartTime,@PathVariable String endTime,

           @PathVariable StringstartNum,@PathVariable String offset)throws Exception{

}

Post介面呼叫正常,但是呼叫Get介面時,就一直報上面的這個異常,百思不得其解!!

後來各種觀察,各種測試,發現當兩個方法引數個數不同時,都可以正常執行,因此懷疑是restful 沒能把post 和 get 方法區分清除,導致查詢失敗,後又做了幾個測試,證明確實如此,不僅是get和post,put方法也是一樣,只要引數個數相同,都會去匹配post註解下的方法,如果兩個方法引數名稱不同,結果就會出現Could not find @PathVariable不明白問什麼會出現這種現象,註解@RequestMapping的保留策略也是runtime的!待查。。。

24.          Tomcat7與ActiveMQAjaxServlet不相容問題

Tomcat6上使用ActiveMQ AjaxServlet時,完全沒有問題

但是,Tomcat7使用ActiveMQ AjaxServlet時,發生Not supported. exception

網上搜尋了很多方案,都說只要對AjaxServlet加上async-supported支援就可以了。

但是,實際結果還是報同樣的異常。

經過長時間的嘗試,終於找到問題的原因了。

原來訊息請求在AjaxServlet處理前,會先被filter先處理,所以filter也要加上async-supported支援。

具體配置程式碼如下:

web.xml

<!-- ActiveMQ servlet --><servlet><servlet-name>AjaxServlet</servlet-name><servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>AjaxServlet</servlet-name><url-pattern>/amq/*</url-pattern></servlet-mapping><!-- 著名 Character Encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><!-- 強制進行轉碼 --><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- ActiveMQ --><filter><filter-name>session</filter-name><filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class><async-supported>true</async-supported></filter><filter-mapping><filter-name>session</filter-name><url-pattern>/*</url-pattern></filter-mapping>

25.          unknown protocol: c

專案部署在tomcat下,啟動的時候報錯:
java.net.MalformedURLException: unknown protocol: c
                   at java.net.URL.<init>(URL.java:574)
                   at java.net.URL.<init>(URL.java:464)
                   at java.net.URL.<init>(URL.java:413)
                   at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650)
                   at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
                   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)...
這個錯一般有兩種原因導致:
1URL協議、格式或者路徑錯誤,好好檢查下你程式中的程式碼如果是路徑問題,最好不要包含中文路徑,因為有時中文路徑會亂碼,導致無法識別Tomcat 不要安裝在有中文或空格的路徑下。
2jar問題:用jdom解析xml檔案,如果應用路徑裡有gnujaxp.jar包的話,jdom就會呼叫它去解析xml檔案,導致上述異常的出現。如果是這個問題,解決方法:在應用路徑裡去掉對gnujaxp.jar包的引用。

26.          Unsupported major.minor version51.0

問題產生的原因:用jdk7編譯的class檔案放到基於jdk6執行在tomcat之中,就會報這個錯。

解決起來也很方便:開啟eclipse中專案上的屬性—java compiler–選擇一個合適的版本後重新編譯即可。

具體步驟

解決:專案------>右鍵------>屬性------>Java Compiler------>Compiler Compliance Level------>選擇你使用的JDK版本------>應用。

 

總結:不同的JDK版本使用的major.minor不同,所以會導致這個錯誤。在專案中要使用當前電腦配置的JDK版本,切忌張冠李戴。

知識擴充:major.minor version,它相當於一個軟體的主次版本號,只是在這裡是標識的一個Java Class的主版本號和次版本號。

JDK1.7   51.0

JDK1.6   50.0

JDK1.5 49.0

JDK1.4 48.0

總之問題的根由是低版本的 JVM 無法載入高版本的 class 檔案造成的,找到高版本的 class 檔案處理一下就行了。

27.          Can not issue data manipulationstatements with executeQuery()

Can not issue data manipulation statementswith executeQuery().

       atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

       atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

       atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)

       atcom.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:413)

       atcom.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1336)

       atcom.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)

       atcom.cmcc.util.C3p0Utils.executeQuery(C3p0Utils.java:147)

錯誤原因:

使用executeQuery()方法執行了update,insert,delete等語句

28.          Hibernate中常見的異常

本文總結Hibernate中常見的異常。

1. net.sf.hibernate.MappingException

       當出現net.sf.hibernate.MappingException: Errorreading resource:…異常時一般是因為對映檔案出現錯誤。

       當出現net.sf.hibernate.MappingException:Resource: … not found是因為XML配置檔案沒找到所致,有可能是放置目錄不正確,或者沒將其加入hibernate.cfg.xml中。

2. net.sf.hibernate.PropertyNotFoundException

       當出現net.sf.hibernate.PropertyNotFoundException:Could not find a setter for property name in class …時,原因一般是因為XML對映檔案中的屬性與對應的Java類中的屬性的getter或setter方法不一致。

3. org.hibernate.id.IdentifierGenerationException

       當出現org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling save():異常時,一般是因為<id>元素配置不正確,<id>元素缺少其子元素<generator></generator>的配置引起。

       解決方案:<id>元素映射了相應資料庫表的主鍵欄位,對其子元素<generatorclass="">,其中class的取值可以為increment、identity、sequence、hilo、native……等,更多的可參考hibernate參考文件,一般取其值為native 。具體可參考2.2.2.1小節。

4. a different object with the same identifier value was alreadyassociated with the session

       當出現a different object with the same identifiervalue was already associated with the session時,一般是因為在hibernate中同一個session裡面有了兩個相同標識但是是不同實體。

       有如下幾種解決方案:

(1)使用session.clean(),如果在clean操作後面又進行了saveOrUpdate(object)等改變資料狀態的操作,有可能會報出"Found two representationsof same collection"異常。

(2)使用session.refresh(object),當object不是資料庫中已有資料的物件的時候,不能使用session.refresh(object)因為該方法是從hibernate的session中去重新取object,如果session中沒有這個物件,則會報錯所以當你使用saveOrUpdate(object)之前還需要判斷一下。

(3)session.merge(object),Hibernate裡面自帶的方法,推薦使用。

5. SQL Grammer Exception,Could not execute JDBC batch update

       當出現SQL Grammer Exception,Could not executeJDBC batch update異常時,一般是由如下問題引起:

(1)SQL語句中存在語法錯誤或是傳入的資料有誤;

(2)資料庫的配置不合法,或者說是配置有誤。較容易出現的有資料表的對映檔案(,hbm.xml檔案)配置有誤;Hibernate.cfg.xml檔案配置有誤;

(3) 當前的資料庫使用者許可權不足,不能操作資料庫。以是以Oracle 資料庫為例,這種情況下在錯誤提示中會顯示java.sql.BatchUpdateException: ORA-01031: insufficient privileges這樣的資訊。

       針對上面的各種原因,開發人員可以找出對應的解決方案。

29.          teamviewer現在無法捕捉螢幕,這可能是由於快速的使用者切換或遠端桌面會話已經斷開

這個問題蠻簡單,如果你用遠端桌面連過去開啟teamview的話,當你退出遠端桌面後,外網用teamview連線就會出現這個問題,解決方法:不用遠端連線過去開啟teamview,直接在在電腦本機上手動開啟teamview就可以了

已驗證!

30.          does not contain handler parameter named 'method'.  This may be caused by whitespace in the label text.

Struts1中 action這樣配置的話:

<actionpath="/login" name="loginForm"parameter="method"

    type="org.springframework.web.struts.DelegatingActionProxy">

頁面訪問時:正確方式是:/login.do?method=xxx ,如果以 /login.do 訪問就會報此異常

31.          java.lang.OutOfMemoryError:PermGen space PermGen space

一、  java.lang.OutOfMemoryError:PermGen space PermGen space的全稱是Permanent Generation space,是指記憶體的永久儲存區域, 這塊記憶體主要是被JVM存放Class和Meta資訊的,Class在被Loader時就會被放到PermGen space中, 它和存放類例項(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程式執行期對 PermGen space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤, 這種錯誤常見在web伺服器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm預設的大小(4M)那麼就會產生此錯誤資訊了。
 解決方法: 手動設定MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M-XX:MaxPermSize=128m

二、 Windowscatalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 

如果用startup.bat啟動tomcat,OK設定生效.夠成功的分配200M記憶體.但是如果不是執行startup.bat啟動tomcat而是利用windows的系統服務啟動tomcat服務,上面的設定就不生效了,就是說setJAVA_OPTS=-Xms128m -Xmx350m沒起作用.上面分配200M記憶體就OOM..
windows
服務執行的是bin\tomcat.exe.他讀取登錄檔中的值,而不是catalina.bat的設定.解決辦法:修改登錄檔HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftware Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions原值為
-Dcatalina.home="C:\ApacheGroup\Tomcat5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat5.0\common\endorsed"
-Xrs
加入 -Xms300m-Xmx350m  重起tomcat服務,設定生效

32.          MySQL server version for theright syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT'

You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax to use near'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1

原因:

專案中我用的jdbc驅動版本

mysql-connector-java-5.1.15.jar

mysql資料庫版本為5.6

jdbc在連線資料庫時候會發送測試語句SETOPTION SQL_SELECT_LIMIT=DEFAULT

這在mysql5.6以下版本是可以的,但是5.6不再支援SET...

由於5.6這個變化,導致一些舊的軟體可能執行出錯。mysql官方也不承認這是bug,只能升級你的Mysql驅動來解決。

目前所知:mysql-connector-java-5.1.15.jar及以前版本不可以,

mysql-connector-java-5.1.25.jar及之後版本可以

解決方法:

升級驅動版本,我改成了mysql-connector-java-5.1.25.jar 

33.          Error creating bean with name'patientService': Injection of autowired dependencies failed;

Caused by:org.springframework.beans.factory.BeanCreationException: Could not autowirefield: public com. flex.dao.JdbcDaocom.cmcc.flex.service.PatientService.jdbcDao; nested exception isorg.springframework.beans.factory.NoSuchBeanDefinitionException: No matchingbean of type [com.flex.dao.JdbcDao] found for dependency: expected at least 1bean which qualifies as autowire candidate for this dependency. Dependencyannotations:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

不能建立bean,因為自動注入失敗。出現此異常的原因是:註解掃描配置順序錯誤,或者配置衝突,請檢查各個引入的xml檔案中是否有重複配置。參考配置如下:

<context:component-scanbase-package="com.test"/>

   <!-- enable autowire -->

   <context:annotation-config/>

   <!-- enable transaction demarcation with annotations -->

   <tx:annotation-driven/>

34.          java.io.IOException: Cannot runprogram "C:\analyze":  CreateProcess error=5

java程式通過Runtime.getRuntime().exec()方法呼叫C程式可執行檔案,報此異常。

最後的解決方法是:把jdk的版本從7換成了6,一切就正常了,哎!!

35.          打成jar包後,註解無法掃描的問題

解決方法:export jar的時候,勾選add directory entries 

36.          ava.io.EOFException錯誤

Tomcat啟動後報:IOException while loading persistedsessions: java.io.EOFException錯誤

出現原因:tomcat對儲存硬碟的session讀取失敗解決方法:開啟TOMCAT的安裝目錄,在WORK資料夾找到Catalina\localhost\你的工程名所在資料夾下,把裡面的session.ser刪除即可,或者直接清空localhost

相關推薦

2014-J2EE開發工作遇到的異常問題解決方法總結

本人做了近三年的J2EE開發工作,主要架構為SSH+MySQL+Tomcat,專案中也用到了一些第三方的開源工具或者中介軟體,工作中難免會遇到各種各樣的異常問題,對於一些給我造成比較大的麻煩的問題,我習慣將他們和解決方案記錄下來,以免下次遇到時再次東搜西找。這些問題有些可能

Android開發過程的坑解決方法收錄(四)

1.某個控制元件要放在Linearlayout佈局的底部(底部導航條) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.

Android開發過程的坑解決方法收錄

  1.某個控制元件要放在Linearlayout佈局的底部(底部導航條)      <LinearLayout      android:layout_width="match_parent"      android:orientation="vertical"      android:layou

Android開發過程的坑解決方法收錄(五)

版本號 如果 出現 過程 androi 分享圖片 onf blog end 1. 導入依賴庫出現錯誤 因為使用的sdk版本不同,使用下列代碼強制使用最低版本,25.3.1就是我當前使用的版本號,根據自己的情況修改 configurations.all {

web開發時java.lang.IllegalArgumentException: argument type mismatch異常解決方法

最近在做一個專案的時候,突然間出現了這個異常 嚴重:Servlet.service() for servlet action threw exception java.lang.IllegalArgumentException:argument type mismatch這

WEB開發過程遇到的各種問題解決方法總結

A:把MySQL的jar包放在Tomcat安裝目錄下的lib資料夾下 ------------------------------------------------------------------------------------------------ Q:The server does n

android 開發遇到錯誤解決辦法總結(在別處看到的)

一、dialog.show()引起的android.view.WindowManager$BadTokenException錯誤錯誤日誌 android.view.WindowManager$BadTokenException: Unable to add window -

微信小程式開發常見問題解決方法

本文章總結小程式開發中常見的錯誤問題。希望能幫助初學者少走彎路,避免類似的錯誤。 1:出現“指令碼錯誤或者未正確呼叫Page()”的錯誤提示。 解決方法:出現這個錯誤的原因通常是因為index.

Maven常見異常解決方法

for display maven2 main collect nts exist temp set 異常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependen

<canvas合成海報>所問題解決方案總結

設置 iphone 出現問題 保存 白屏 全屏 分享 ase .get 最近做了一個用canvas合成海報圖片的移動端項目,由於一點canvas基礎都沒有,所以去網上搜了一位前輩的demo,但是開發過程中遇到了很多問題,現將所遇問題及解決方法總結如下: 1、移動端c

MySQL的錯誤解決方法

chan col pan sql命令 sharp arp 自己的 class word 1. 修改密碼提示 ERROR 1054 (42S22): Unknown column ‘‘password‘‘ in ‘‘field list‘‘ 錯誤原因:mysql數據庫下已

工作隨機金額生成解決方法

5% 等於 就是 其中 輸入 ... 規律 百分比 功能 公司最近開發一個新的項目,有其中的一個需求就是用戶輸入一筆金額數目和把這筆金額分成多少筆數量,程序就是用戶輸入的筆數來生成每筆金額,而且要求每筆金額不能少於10塊,其實金額從大到小排序,第一筆金額與第二筆金額相差0到

Maven常見異常解決方法---測試代碼編譯錯誤

detail mave https ror 錯誤 failure 異常 gin pro [ERROR] Please refer to E:\maven\web_nanchang\target\surefire-reports for the individual test

虛擬機器的問題解決方法

問題:32位xp系統可以在虛擬機器中安裝win7的64位系統嗎? tips:1、無論使用系統是多少位,都可以在虛擬機器裡安裝任意位數系統。 2、虛擬機器支援:Windows、Linux、Chrome OS、Mac OS、Android OS等。 3、虛擬機

HTML三大選擇器的使用和命名方式,優先順序,以及選擇器常見錯誤解決方法

HTML中的三大選擇器1.標籤選擇器:使用標籤的名稱作為選擇器,選中標籤設定樣式, 特點:可以選中多個標籤,給一堆標籤同時設定樣式書寫方式 標籤名{ 樣式 }2.類選擇器:在標籤中利用class屬性設

學習flask web開發遇到的一些問題解決方法

Q:ExtDeprecationWarning: Importing flask.ext.script is deprecated, use flask_script instead. .format(x=modname), ExtDeprecationWa

Java常見的記憶體溢位異常解決方法

Java的記憶體溢位,主要是兩方面的異常:堆記憶體溢位、非堆記憶體溢位。 一、 java.lang.OutOfMemoryError: Java heap space。 Heap size 設定 JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定

pandas安裝若干異常解決方案總結

在為Python安裝第三方工具pandas出現了若干問題。 當我在cmd命令環境輸入pip install pandas準備安裝pandas時,出現了錯誤提示:Microsoft Visual C++ 9.0 is required.從網上查詢資料有如下解決方案: 1.下載

FastJsonJSONObject用法常用方法總結

SON協議使用方便,越來越流行,JSON的處理器有很多,這裡我介紹一下FastJson,FastJson是阿里的開源框架,被不少企業使用,是一個極其優秀的Json框架,Github地址: FastJson FastJson對於json格式字串的解析主要用到了下面三個類: 1.JSON:f

工作遇到問題以及解決方法

問題一:eclipse的maven工程在構建的時候報了source 7 或更高版本來支援diamon的運算子。 解決方法:在pom.xml中新增 Spark:java.net.BindException: Address already in use: Service