我有一个Flink程序,它使用自定义生成器生成数据,同时,我想将该数据保存到SQLite3数据库中。一种方法是在map函数中将数据解析为所需的格式,然后在map操作中插入数据。但我无法做到这一点。我用来向SQLite3写入数据的代码如下所示。我没有提到整个代码,因此数据库连接也存在于代码的初始部分,不包括在下面
DataStream<Event> merged = stream1.union(stream2,stream3);
merged.print();
// sending data to Timekeeper via socket
merged.map(new MapFunction<Event, String>() {
@Override
public String map(Event event) throws Exception {
String tuple = event.toString();
Integer patient_id = event.getPatinet_id();
Integer sensor_id = event.getSensor_id();
Integer uid = event.getUid();
Long time = event.getTime();
Integer value = event.getValue();
String sql1 = "INSERT into mobile_events ( patientid , sensorid , uid , eatg ,valuez ) VALUES (" +
+ patient_id + ","
+ sensor_id + ","
+ uid + ","
+ time + ","
+ value
+ ");" ;
stmt.executeUpdate(sql1);
return tuple + "\n";
}
});
问题是
Error:(124, 22) java: local variables referenced from an inner class must be final or effectively final
如果我把它作为最终版,那么我会得到以下错误
Caused by: java.io.NotSerializableException: org.sqlite.jdbc4.JDBC4Statement
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.flink.util.InstantiationUtil.serializeObject(InstantiationUtil.java:315)
at org.apache.flink.api.java.ClosureCleaner.clean(ClosureCleaner.java:81)
... 4 more