flink mysql sink
前言:
- 应用场景:flink将javaBean写入mysql;
- 我的javaBean为Gps_infoBean;
- mysql为windows版本;
package com.cywx.function;
import com.cywx.javabean.Gps_InfoBean;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
/**
* @Author:
* @Description:
* @Data:16:58
*/
public class MysqlSink extends RichSinkFunction<Gps_InfoBean> {
private Connection conn = null;
private PreparedStatement ps=null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://mysql的IP地址:3306/自己的数据库名?useUnicode=true&characterEncoding=UTF-8";
String username = "root";
String password = "123";
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
//加载JDBC驱动
Class.forName(driver);
//创建连接
conn = DriverManager.getConnection(url,username,password);
//写插入的sql
String sql = "insert into gps_info01 (`key`,ci,mcc,mnc,lac,typeId,connected,lon,lat,dbm,`time`,old_id) values (?,?,?,?,?,?,?,?,?,?,?,?);";//根据自己的javaBean字段个数设置
ps = conn.prepareStatement(sql);
}
@Override
public void invoke(Gps_InfoBean value, Context context) throws Exception {
System.out.println(value.getKey());
//将sql中的问号指定填入哪个数据
ps.setString(1,value.getKey());
ps.setString(2,value.getCi());
ps.setString(3,value.getMcc());
ps.setString(4,value.getMnc());
ps.setString(5,value.getLac());
ps.setString(6,value.getTypeId());
ps.setString(7,value.getConnected());
ps.setDouble(8,value.getLon());
ps.setDouble(9,value.getLat());
ps.setString(10,value.getDbm());
ps.setString(11,value.getTime());
ps.setString(12,value.getOld_id());
ps.executeUpdate();
}
@Override
public void close() throws Exception {
conn.close();
ps.close();
super.close();
}
}
问题:
- 若报错:null,***计算机名****没有权限,做以下设置
- 进入mysql
- use mysql//配置的数据库
update user set host='%' where user='root';//赋予权限
flush privileges;//刷新