执行MySQL数据上传Java代码时遇UnknownHostException错误求助
解决MySQL连接时的UnknownHostException问题
看到你碰到的这个错误,第一反应就是连接URL里的IP地址藏了个小坑——你看报错信息里的IP前面带了个空格:" 192.168.0.110",这大概率就是导致解析失败的元凶!
下面给你几个一步步排查和解决的方法:
1. 先修正数据库连接URL的空格问题
先仔细检查你的连接URL,是不是IP地址前面不小心多打了空格?比如如果你的URL是类似这样的:
String dbUrl = "jdbc:mysql:// 192.168.0.110:3306/your_db?useSSL=false&serverTimezone=Asia/Shanghai";
赶紧把IP前面的空格删掉,改成:
String dbUrl = "jdbc:mysql://192.168.0.110:3306/your_db?useSSL=false&serverTimezone=Asia/Shanghai";
这个多余的空格会让Java把带空格的字符串当成完整主机名去解析,自然找不到对应的网络地址。
2. 验证客户端和MySQL服务器的网络连通性
如果修正空格后还是报错,先在运行Java程序的机器上ping一下服务器IP:
ping 192.168.0.110
如果ping不通,说明两台机器的网络有问题:可能是服务器防火墙没开放3306端口,或者两台设备不在同一个局域网里,得先把网络打通。
3. 检查MySQL服务器的远程连接权限
确保MySQL允许从你的客户端IP访问:
- 登录MySQL服务器,执行以下SQL(替换成你的实际用户名、密码和数据库名):
GRANT ALL PRIVILEGES ON your_db.* TO 'your_username'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
- 然后修改MySQL的配置文件(比如
my.cnf或my.ini),把bind-address的值改成0.0.0.0(允许所有IP访问),之后重启MySQL服务。
4. 核对Java代码的连接细节
再确认代码里没有其他低级错误:比如端口号是不是默认的3306,用户名和密码有没有拼写错误,这些小细节也可能导致连接失败。
给你一个正确的经纬度上传代码示例,你可以对比参考:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class LatLngUploader { private static final String DB_URL = "jdbc:mysql://192.168.0.110:3306/location_db?useSSL=false&serverTimezone=Asia/Shanghai"; private static final String DB_USER = "root"; private static final String DB_PWD = "your_mysql_password"; public static void uploadLatLng(double lat, double lng) { try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD)) { String sql = "INSERT INTO gps_data (latitude, longitude) VALUES (?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setDouble(1, lat); pstmt.setDouble(2, lng); pstmt.executeUpdate(); System.out.println("经纬度数据上传成功!"); } } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { // 测试上传示例经纬度 uploadLatLng(30.2672, 120.1551); } }
先从最可能的空格问题入手,应该能快速解决你的报错~
内容的提问来源于stack exchange,提问作者Majid Ali
相关产品推荐
相关产品推荐

