Zebra FX7500 RFID阅读器连接公网MySQL数据库的配置问题
Zebra FX7500 RFID对接公网MySQL配置方案(Java Embedded SDK 环境)
前置准备校验
- 确认公网MySQL已开启远程访问权限,对应端口(默认3306)已在服务器安全组、防火墙放行,无IP白名单限制(或已添加你的嵌入式设备公网出口IP)
- 确认你使用的Java Embedded SDK版本支持JDBC连接,已提前导入MySQL对应版本的JDBC驱动包到项目依赖中,推荐使用
mysql-connector-java 8.0.x版本适配大多数MySQL 5.7/8.0实例 - 确认Zebra FX7500的标签读取回调逻辑已调试通,可正常在控制台打印EPC、RSSI、读取时间等你需要上传的字段
MySQL核心参数配置
所有数据库参数建议统一抽离到配置类或属性文件中,不要硬编码在业务逻辑里,核心参数参考如下:
// 数据库配置类示例 public class DbConfig { // 公网MySQL连接地址,格式为 jdbc:mysql://[公网IP/域名]:[端口]/[数据库名]?[扩展参数] public static final String DB_URL = "jdbc:mysql://替换为你的公网IP:3306/rfid_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"; // 数据库登录用户名 public static final String DB_USER = "你的数据库用户名"; // 数据库登录密码 public static final String DB_PWD = "你的数据库密码"; // 插入标签数据的SQL模板,需对应你提前创建的标签数据表结构 public static final String INSERT_TAG_SQL = "INSERT INTO tag_records (epc, rssi, read_time, reader_id) VALUES (?, ?, ?, ?)"; }
扩展参数说明:
useSSL=false:公网连接如果没有配置SSL证书建议关闭,避免连接报错serverTimezone=Asia/Shanghai:适配MySQL 8.0+的时区要求,避免时间写入异常allowPublicKeyRetrieval=true:解决部分远程连接时的公钥获取失败问题
完整业务逻辑参考模板
在RFID标签读取的回调方法中调用JDBC逻辑写入数据库即可,参考代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import com.zebra.rfid.api3.*; // 导入Zebra官方SDK依赖 public class RfidDataUpload { private static RFIDReader rfidReader = null; public static void main(String[] args) { try { // 此处替换为你的FX7500阅读器IP,按已完成的基础配置填写即可 rfidReader = new RFIDReader("192.168.1.100", 5084, 0); rfidReader.connect(); // 绑定标签读取回调监听 rfidReader.Events.addReadNotifyListener(new ReadNotifyListener() { @Override public void readNotify(ReadEvent event) { TagData[] tags = event.getTags(); for (TagData tag : tags) { // 提取需要上传的标签字段,可按需扩展 String epc = tag.getTagID(); int rssi = tag.getRSSI(); long readTime = System.currentTimeMillis(); String readerSn = rfidReader.getReaderInformation().getSerialNumber(); // 写入公网MySQL insertTagToDb(epc, rssi, readTime, readerSn); } } }); // 启动 inventory 读取 rfidReader.Actions.Inventory.perform(); } catch (Exception e) { e.printStackTrace(); } } // 数据库写入方法 private static void insertTagToDb(String epc, int rssi, long readTime, String readerSn) { Connection conn = null; PreparedStatement pst = null; try { // 加载JDBC驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 获取数据库连接 conn = DriverManager.getConnection(DbConfig.DB_URL, DbConfig.DB_USER, DbConfig.DB_PWD); // 预编译SQL避免注入风险 pst = conn.prepareStatement(DbConfig.INSERT_TAG_SQL); pst.setString(1, epc); pst.setInt(2, rssi); pst.setLong(3, readTime); pst.setString(4, readerSn); // 执行插入 pst.executeUpdate(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); // 可按需添加失败重试、本地缓存逻辑,避免公网波动导致数据丢失 } finally { // 释放数据库资源 try { if (pst != null) pst.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
常见异常排查
- 连接超时:优先排查公网MySQL的端口是否放行,是否配置了IP白名单,嵌入式设备是否能正常访问公网
- 权限报错:在MySQL服务端执行
GRANT ALL ON 你的数据库名.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码';,执行后运行FLUSH PRIVILEGES;刷新权限 - 编码/时区报错:检查JDBC URL中的编码、时区参数是否与MySQL实例的配置保持一致
内容的提问来源于stack exchange,提问作者JuanPa Cortez
相关产品推荐
相关产品推荐

