我想通过使用ConvertJSONtoSQL处理器将我的JSON字符串转换为SQL语句 . 示例:JSON字符串 -
{"cpuwait":"0.0","servernamee":"mywindows","cpusys":"5.3","cpuidle":"77.6","datee":"29-SEP-2016","timee":"00:01:33","cpucpuno":"CPU01","cpuuser":"17.1"}
oracle db中的表结构 -
CREATE TABLE cpu (
datee varchar2(15) DEFAULT NULL,
timee varchar2(10) DEFAULT NULL,
servernamee varchar2(20) DEFAULT NULL,
cpucpuno varchar2(4) DEFAULT NULL,
cpuuser varchar2(5) DEFAULT NULL,
cpusys varchar2(5) DEFAULT NULL,
cpuwait varchar2(5) DEFAULT NULL,
cpuidle varchar2(5) DEFAULT NULL
);
用于MySQL数据库的配置:
数据库连接url:jdbc:mysql:// localhost:3306 / testnifi
数据库驱动程序类名:com.mysql.jdbc.Driver
我使用(DBCP连接池)JDBC url,用户名和密码成功连接到MySQL . ConvertJSONtoSQL处理器在那里成功运行,我得到有效的sql insert语句作为输出 . 但是,当我尝试使用Oracle数据库时,我正在尝试
ERROR [定时器驱动的进程线程-6] o.a.n.p.standard.ConvertJSONToSQL java.sql.SQLException:Stream已经关闭
我对Oracle数据库连接的配置:
我搜索了谷歌中的错误但我发现在数据库表中使用长数据类型但我没有使用它时会发生此错误 . 我浏览了ConvertJSONtoSQL处理器的源代码(跟踪堆栈跟踪)并尝试在eclipse中实现相同的功能,我没有收到任何错误,我可以连接到数据库并进行查询 .
那我的配置有什么错误吗?
Nifi版本 - 0.7.0 / 1.0(我两个都得到相同的错误)
java版本 - java8
Oracle DB版本 - Oracle Database 11g Express Edition
完整堆栈跟踪:
2016-10-19 07:10:06,557 ERROR [计时器驱动的进程线程-6] oanpstandard.ConvertJSONToSQL java.sql.SQLException:流已经在oracle.jdbc.driver.LongAccessor.getBytesInternal(LongAccessor.java)关闭:oracle.jdbc.driver的oracle.jdbc.driver.LongAccessor.getBytes(LongAccessor.java:126)〜[ojdbc6.jar:11.2.0.1.0]的〜(156)〜[ojdbc6.jar:11.2.0.1.0] .LongAccessor.getString(LongAccessor.java:201)~ [ojdbc6.jar:11.2.0.1.0] at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:427)〜[ojdbc6.jar:11.2.0.1 . 0] at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:1251)〜[ojdbc6.jar:11.2.0.1.0] at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494)〜[ ogdbc6.jar:11.2.0.1.0] atg.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)〜[na:na] at org.apache.nifi.processors.standard.ConvertJSONToSQL $ ColumnDescription . 来自(ConvertJSONToSQL.java:677)〜[nifi-standard-processors-0.7.0.jar:0.7.0] org.apac在org.apache.nifi.processors.standors.ConvertJSONToSQL上的he.nifi.processors.standard.ConvertJSONToSQL $ TableSchema.from(ConvertJSONToSQL.java:621)~ [nifi-standard-processors-0.7.0.jar:0.7.0] oron.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27).onTrigger -0.7.0.jar:0.7.0] org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1054)[nifi-framework-core-0.7.0.jar:0.7.0] at org . apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:136)[nifi-framework-core-0.7.0.jar:0.7.0] atg.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call( ContinuallyRunProcessorTask.java:47)[nifi-framework-core-0.7.0.jar:0.7.0] org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent $ 1.run(TimerDrivenSchedulingAgent.java:127)[nifi-framework- core.0.7.0.jar:0.7.0] at java.util.concurrent.Executors $ RunnableAdapte r.call(未知来源)[na:1.7.0_40] at java.util.concurrent.FutureTask.runAndReset(Unknown Source)[na:1.7.0_40] at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301(Unknown来源)[na:1.7.0_40] at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(Unknown Source)[na:1.7.0_40] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)[na:1.7 .0_40] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)[na:1.7.0_40] at java.lang.Thread.run(Unknown Source)[na:1.7.0_40
1 回答
这似乎是Oracle驱动程序中的一个错误 . 看到:
https://blog.jooq.org/2015/12/30/oracle-long-and-long-raw-causing-stream-has-already-been-closed-exception/
Hibernate custom type to avoid 'Caused by: java.sql.SQLException: Stream has already been closed'
第2项给我解决方法 . 基本上在bootstrap.conf中添加以下参数: