play.exceptions.JavaExecutionException: org.hibernate.exception.GenericJDBCException:

2019-06-20 09:37:06,266 ERROR ~ Incorrect string value: '\xF0\x9F\x92\x99\xE6\xB8...' for column 'scenic_info' at row 1
2019-06-20 09:37:06,268 ERROR ~ Internal Server Error (500) for request GET /travel/interface/tongcheng/getThreadGoodsSku?productId=283
play.exceptions.JavaExecutionException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:242)
        at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:237)
        at play.Invoker$Invocation.run(Invoker.java:264)
        at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:217)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
        at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:108)
        at jobtobp.ConsumerSecnicJobToBp.updateModifyTempData(ConsumerSecnicJobToBp.java:300)
        at jobtobp.ConsumerSecnicJobToBp.handleScenicList(ConsumerSecnicJobToBp.java:116)
        at jobtobp.ConsumerSecnicJobToBp.ConsumerSecnicData(ConsumerSecnicJobToBp.java:79)
        at jobtobp.GetSecnicJobToBp.getSecnicData(GetSecnicJobToBp.java:65)
        at controllers.remote.tongcheng.OrderIDAction.queryIdProGoodsSku(OrderIDAction.java:44)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:750)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:708)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:684)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:679)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:172)
        ... 10 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:219)
        at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)
        at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)
        at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:188)
        at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
        ... 24 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x99\xE6\xB8...' for column 'scenic_info' at row 1
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
        at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:210)
        ... 28 more

play.exceptions.JavaExecutionException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:242)
        at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:237)
        at play.Invoker$Invocation.run(Invoker.java:264)
        at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:217)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
        at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:108)
        at jobtobp.ConsumerSecnicJobToBp.updateModifyTempData(ConsumerSecnicJobToBp.java:300)
        at jobtobp.ConsumerSecnicJobToBp.handleScenicList(ConsumerSecnicJobToBp.java:116)
        at jobtobp.ConsumerSecnicJobToBp.ConsumerSecnicData(ConsumerSecnicJobToBp.java:79)
        at jobtobp.GetSecnicJobToBp.getSecnicData(GetSecnicJobToBp.java:65)
        at controllers.remote.tongcheng.OrderIDAction.queryIdProGoodsSku(OrderIDAction.java:44)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:750)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:708)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:684)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:679)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:172)
        ... 10 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:219)
        at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)
        at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)
        at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:188)
        at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
        ... 24 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x99\xE6\xB8...' for column 'scenic_info' at row 1
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
        at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:210)
        ... 28 more
2019-06-20 09:37:12,479 ERROR ~ getTicketProductDetail ---1
2019-06-20 09:37:12,482 ERROR ~ getTicketProductDetail ---2
2019-06-20 09:37:12,484 ERROR ~ getTicketProductDetail ---3
2019-06-20 09:37:12,486 ERROR ~ getTicketProductDetail ---4
2019-06-20 09:37:12,487 ERROR ~ getTicketProductDetail ---5
2019-06-20 09:37:12,488 ERROR ~ getTicketProductDetail ---6
2019-06-20 09:37:12,490 ERROR ~ getTicketProductDetail ---7
2019-06-20 09:37:12,517 ERROR ~ getTicketProductDetail ---8
2019-06-20 09:37:12,519 ERROR ~ getTicketProductDetail ---9
2019-06-20 09:37:12,523 ERROR ~ getTicketProductDetail ---10
2019-06-20 09:37:12,525 ERROR ~ getTicketProductDetail ---11
2019-06-20 09:37:13,310 ERROR ~  [DUBBO] Unexpected error occur at send statistic, cause: Forbid consumer 10.10.2.94 access service com.alibaba.dubbo.monitor.MonitorService from registry 10.10.1.215:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist)., dubbo version: 2.5.3, current host: 10.10.2.94
com.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.10.2.94 access service com.alibaba.dubbo.monitor.MonitorService from registry 10.10.1.215:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist).
        at com.alibaba.dubbo.registry.integration.RegistryDirectory.doList(RegistryDirectory.java:579)
        at com.alibaba.dubbo.rpc.cluster.directory.AbstractDirectory.list(AbstractDirectory.java:73)
        at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.list(AbstractClusterInvoker.java:260)
        at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:219)
        at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72)
        at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52)
        at com.alibaba.dubbo.common.bytecode.proxy0.collect(proxy0.java)
        at com.alibaba.dubbo.monitor.dubbo.DubboMonitor.send(DubboMonitor.java:113)
        at com.alibaba.dubbo.monitor.dubbo.DubboMonitor$1.run(DubboMonitor.java:70)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

先說明,服務器上使用的數據庫是mysql,這個問題出現的原因,就是本地數據庫,測試數據庫,模擬數據庫,跟線上數據庫的

這個表的字符集編碼都是utf8mb4,可以奇怪就奇怪在,同上的數據,同樣的字符集編碼,在本地,測試,模擬三個數據庫都沒有問題的數據,在線上就是不行,後來我就一點一點排查問題,首先這個表中不是所有的字段都能插入只有這個'scenic_info' 字段不行,這個字段是longtext字段,網上網友們許多都是把數據庫表的字符集修改爲utf8mb4就成,我這個是創建表的時候就是這個字符集,直到後來,我才發現線上環境的這個表這個字段之所以插入不進去就是以爲,插入的數據中有漢字,把插入的字符串中是漢字全部轉碼爲unicode編碼就可以插入,所以我下面記錄了這兩個工具方法

/**
	 * 
	 * 描述: unicode  轉  漢字
	 * @author: 
	 * @date:2019年6月20日 下午4:31:15
	 * @param unicode 
	 * @return
	 */
	public static String unicodeToCn(String unicode) {
	    /** 以 \ u 分割,因爲java註釋也能識別unicode,因此中間加了一個空格*/
	    String[] strs = unicode.split("\\\\u");
	    String returnStr = "";
	    // 由於unicode字符串以 \ u 開頭,因此分割出的第一個字符是""。
	    for (int i = 1; i < strs.length; i++) {
	      returnStr += (char) Integer.valueOf(strs[i], 16).intValue();
	    }
	    return returnStr;
	}
	 
	/**
	 * 
	 * 描述: 只把字符串中的漢字轉化爲unicode
	 * @author: 
	 * @date:2019年6月20日 下午4:48:49
	 * @param cn
	 * @return
	 */
	public static String cnToUnicodeNew(String cn) {
	    char[] chars = cn.toCharArray();
	    String returnStr = "";
	    for (int i = 0; i < chars.length; i++) {
	      if (!isChineseChar(chars[i])) {
	    	  returnStr += chars[i];
	      }else{
			  returnStr += "\\u" + Integer.toString(chars[i], 16);
		  }
	    }
	    return returnStr;
	}
	
	/**
	 * 
	 * 描述: 字符轉unicode字符
	 * @author: 
	 * @date:2019年6月20日 下午4:31:41
	 * @param cn
	 * @return
	 */
	public static String cnToUnicode(String cn) {
	    char[] chars = cn.toCharArray();
	    String returnStr = "";
	    for (int i = 0; i < chars.length; i++) {
	      returnStr += "\\u" + Integer.toString(chars[i], 16);
	    }
	    return returnStr;
	}
	
	/**
     * 判斷一個字符是否是漢字
     * PS:中文漢字的編碼範圍:[\u4e00-\u9fa5]
     *
     * @param c 需要判斷的字符
     * @return 是漢字(true), 不是漢字(false)
     */
    public static boolean isChineseChar(char c) {
        return String.valueOf(c).matches("[\u4e00-\u9fa5]");
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章