orcale ArrayIndexOutOfBoundsException 解决办法

org.mybatis.spring.MyBatisSystemException: nested exception IS org.apache.ibatis.executor.ExecutorException: Error preparing statement.  Cause: java.lang.ArrayIndexOutOfBoundsException: 12
AT org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79)
AT org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
AT com.sun.proxy.$Proxy12.insert(UNKNOWN Source)
AT org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:279)
AT com.zh.dao.ThirdOrderToNoticeMapper.addWM_MIS_TALCNTC(ThirdOrderToNoticeMapper.java:25)
AT com.zh.service.impl.ThirdOrderToNoticeServiceImpl.addWM_MIS_TALCNTC(ThirdOrderToNoticeServiceImpl.java:72)
AT com.zh.util.DBTest.addWM_MIS_TALCNTC(DBTest.java:151)
AT sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
AT sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
AT sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
AT java.lang.reflect.Method.invoke(Method.java:606)
AT org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
AT org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
AT org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
AT org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
AT org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
AT org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
AT org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
AT org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
AT org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
AT org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
AT org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
AT org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
AT org.junit.runners.ParentRunner.run(ParentRunner.java:363)
AT org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
AT org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
AT org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
AT org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
AT org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
AT org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused BY: org.apache.ibatis.executor.ExecutorException: Error preparing statement.  Cause: java.lang.ArrayIndexOutOfBoundsException: 12
AT org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:97)
AT org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:59)
AT org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:85)
AT org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)
AT org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
AT org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
AT org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
AT org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
AT sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
AT sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
AT sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
AT java.lang.reflect.Method.invoke(Method.java:606)
AT org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
... 28 more
Caused BY: java.lang.ArrayIndexOutOfBoundsException: 12
AT oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java:950)
AT oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java:623)
AT oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:1212)
AT oracle.jdbc.driver.T4CPreparedStatement.<init>(T4CPreparedStatement.java:28)
AT oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:68)
AT oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3140)
AT oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3042)
AT oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:5890)
AT com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:462)
AT com.alibaba.druid.filter.FilterAdapter.connection_prepareStatement(FilterAdapter.java:934)
AT com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:132)
AT com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:459)
AT com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:350)
AT com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:485)
AT org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:80)
AT org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:88)

... 40 more




解决办法是:在mybatis xml标签后面加上useGeneratedKeys="false"


<think>好的,用户遇到了旁路由设置的问题,导致丢包严重无法上网。我需要仔细分析可能的原因和解决方法。首先,用户的主机IP是192.168.47.13,旁路由的地址是192.168.47.9,设置旁路由作为网关后出现丢包。常见的可能原因包括防火墙设置、路由配置错误、网关或DNS问题,以及硬件问题。 首先,我应该考虑旁路由的防火墙是否阻止了流量。用户可能需要检查OpenWrt的防火墙区域设置,确保LAN区域的入站、出站和转发都允许。另外,NAT规则是否正确,比如是否需要启用Fullcone NAT或者关闭某些过滤选项。 接下来是路由配置的问题。主路由和旁路由之间的通信是否正常?需要确认主路由是否正确地转发流量到旁路由,同时旁路由的路由表是否正确指向主路由作为默认网关。此外,用户的主机是否正确设置了网关和DNS,可能还需要检查是否有IP冲突。 然后是DNS配置,如果DNS解析有问题,即使路由正确,也可能导致无法上网。建议用户将DNS设置为旁路由的IP或者公共DNS如114.114.114.114。 硬件或网络性能问题也不能忽视。网线、接口松动或者旁路由设备性能不足可能导致丢包。可以建议用户通过ping测试检查延迟和丢包情况,比如在旁路由上ping主路由和外网地址,以及在主机上ping旁路由和主路由,查看哪里出现丢包。 另外,用户是否开启了某些可能导致问题的功能,如Turbo ACC中的流量分载或者SFE快速路径,这些有时会导致冲突,需要暂时关闭测试。 还有可能主路由的DHCP设置没有正确分配旁路由作为网关,用户可能手动设置了主机的网关,但其他设备如果有问题可能需要检查DHCP配置。另外,检查主路由的防火墙规则是否阻止了旁路由的流量。 最后,如果以上方法都不行,可能需要更详细的日志分析,比如在旁路由上使用tcpdump抓包,或者查看系统日志中的错误信息。如果用户对网络配置不熟悉,可能需要简化设置,比如先确保旁路由作为纯网关,关闭不必要的插件,逐步排查问题。根据</think>你的描述,设置旁路由后出现丢包和无法上网的问题,可能是由于路由规则、防火墙设置或网络流向配置不当导致的。以下是逐步排查和修改建议: --- ### **一、基础检查** 1. **确认网关指向正确** - 检查设备(192.168.47.13)的网关是否已设置为旁路由 IP `192.168.47.9` - 查看命令(Windows):`ipconfig /all` - Linux/OpenWrt:`ip route show default` 2. **旁路由与主路由连通性** - 在旁路由上执行 `ping 192.168.47.1`(假设主路由 IP 是 192.168.47.1,需确认) - 如果无法 ping 通,检查旁路由的网线、VLAN 配置或主路由的 ARP 表。 --- ### **二、旁路由配置修改** #### 1. **关闭 OpenWrt 防火墙(临时测试)** - 在「常规设置」中 **关闭「SYN-flood 防御」** - 在「区域设置」中确保 **LAN → 入站/出站/转发均设为「接受」** - 重启防火墙:`/etc/init.d/firewall restart` - **注意**:测试后若生效,需重新配置防火墙规则而非长期关闭。 #### 2. **配置 NAT 规则(关键步骤)** - 如果旁路由需要处理 NAT(例如主路由未做 NAT): 在 OpenWrt 的 **网络 → 防火墙 → 自定义规则** 添加: ```bash iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE ``` (`eth0` 需替换为旁路由连接主路由的实际接口名,如 `br-lan`) #### 3. **修改网关和 DNS** - 进入 OpenWrt 管理界面:**网络 → 接口 → LAN → 编辑** - **IPv4 网关**:填写主路由 IP(如 `192.168.47.1`) - **DNS 服务器**:填写主路由 IP 或公共 DNS(如 `114.114.114.114`) - 保存并应用后,重启网络:`/etc/init.d/network restart` --- ### **三、主路由配置** 1. **关闭主路由的 DHCP 冲突** - 如果主路由和旁路由均开启 DHCP,需关闭其中一个(建议保留主路由 DHCP,旁路由关闭)。 2. **主路由静态路由(可选)** - 如果网络有跨网段需求,在主路由添加静态路由: 目标网络:`0.0.0.0/0`,网关:旁路由 IP `192.168.47.9`。 --- ### **四、诊断工具** 1. **检查丢包路径** - 在主机上执行: ```bash ping 192.168.47.9 # 测试到旁路由的连通性 ping 192.168.47.1 # 测试到主路由的连通性 ping 8.8.8.8 # 测试外网连通性 traceroute 8.8.8.8 # 查看路径卡在哪一跳 ``` 2. **OpenWrt 系统日志** - 通过 `logread` 命令或管理界面查看是否有防火墙丢包记录: ```bash logread | grep DROP ``` --- ### **五、其他可能性** 1. **MTU 不匹配** - 尝试在 OpenWrt 的 LAN 接口设置中修改 MTU 为 `1472` 或 `1480`(需与主路由一致)。 2. **IPv6 冲突** - 在 OpenWrt 的 LAN 接口中禁用 IPv6(除非明确需要)。 3. **硬件性能问题** - 旁路由设备(如 R2S、树莓派)性能不足可能导致丢包,可尝试关闭流量监控类插件(如 SQM、AdGuard)。 --- ### **六、最终建议** 1. 按以下流程简化配置: - 旁路由仅作为网关(关闭 DHCP、DNS 等服务)。 - 主路由负责 DHCP,并强制分配网关为旁路由 IP。 - 旁路由防火墙保留默认规则,仅添加 NAT 伪装规则。 2. 若问题依旧,尝试重置 OpenWrt 至初始配置,逐步添加规则排查。 请根据实际网络结构调整配置,若仍有问题可提供更多细节(如主路由型号、OpenWrt 版本、网络拓扑)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值