在写入数据库时,如果使用的是JDBC框架,那么statement设置UtilDate的值会报错的,那么此时如何将UtilDate转为SqlDate呢?
代码使用Flink的自定义Sink写入数据到MySQL
这里就用到了原生的JDBC框架
package org.example.flink.user; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; public class UserSink extends RichSinkFunction方案{ Connection connection = null; PreparedStatement statement = null; @Override public void open(Configuration parameters) throws Exception { String url = "jdbc:mysql://localhost:3306/flink?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"; connection = DriverManager.getConnection(url, "root", "root"); statement = connection.prepareStatement("replace into user (id,username,password,address,email,profile,birthday,register_day,login_day,status,account,balance,age,sex,avatar,`level`) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); } @Override public void invoke(User user, Context context) throws Exception { //直接执行更新语句 statement.setString(1, user.getId()); statement.setString(2, user.getUsername()); statement.setString(3, user.getPassword()); statement.setString(4, user.getAddress()); statement.setString(5, user.getEmail()); statement.setString(6, user.getProfile()); statement.setDate(7, new Date(user.getBirthday().getTime())); statement.setDate(8, new Date(user.getRegisterDay().getTime())); statement.setDate(9, new Date(user.getLoginDay().getTime())); statement.setInt(10, user.getStatus()); statement.setBigDecimal(11, user.getAccount()); statement.setBigDecimal(12, user.getBalance()); statement.setInt(13, user.getAge()); statement.setInt(14, user.getSex()); statement.setString(15, user.getAvatar()); statement.setInt(16, user.getLevel()); statement.execute(); } @Override public void close() throws Exception { statement.close(); connection.close(); } }
思路:使用SqlDate的构造方法
使用SqlDate的构造方法,里面传UtilDate值的long类型的时间戳
statement.setDate(7, new Date(user.getBirthday().getTime()));暑期编程PK赛 得CSDN机械键盘等精美礼品!



