以下程序是连接到Oracle 11g并获取记录。但是如何在pipeline.apply()中为编码器提供NullPointerException。
我已将ojdbc14.jar添加到项目依赖项中。
var host = req.headers.host;
var origin = req.headers.origin;
给出了以下错误。任何线索?
public static void main(String[] args) {
Pipeline p = Pipeline.create(PipelineOptionsFactory.create());
p.apply(JdbcIO.<KV<Integer, String>>read()
.withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
"oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@hostdnsname:port/servicename")
.withUsername("uname")
.withPassword("pwd"))
.withQuery("select EMPID,NAME from EMPLOYEE1")
.withRowMapper(new JdbcIO.RowMapper<KV<Integer, String>>() {
public KV<Integer, String> mapRow(ResultSet resultSet) throws Exception {
return KV.of(resultSet.getInt(1), resultSet.getString(2));
}
}));
p.run();
}
答案 0 :(得分:1)
你好!
很抱歉,错误消息不是很有帮助,但事实上它是一个验证步骤。我已提交BEAM-959来改善这一点。
您需要提供编码器,例如via
.withCoder(KvCoder.of(VarIntCoder.of(), StringUtf8Coder.of())`
我已提交BEAM-960以改善此编码器的自动化,就像我们在Beam的其他大多数地方一样。
答案 1 :(得分:0)
试试这个。
pipeline.apply(( JdbcIO.<KV<Integer, String>>read().withCoder(KvCoder.of(VarIntCoder.of(),StringUtf8Coder.of()))
.withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(
"com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/deepakgoyal")
.withUsername("root")
.withPassword("root"))
.withQuery("select empid, name from employee")
.withRowMapper(new JdbcIO.RowMapper<KV<Integer, String>>() {
public KV<Integer, String> mapRow(ResultSet resultSet) throws Exception {
return KV.of(resultSet.getInt(1), resultSet.getString(2));
}
})
))
并且不要忘记在Project中添加mySql Connector jar。提前谢谢。