You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy应用连接MySQL服务器时崩溃,PC运行正常安卓端报错如何解决

问题根源

你代码里写的数据库连接host是localhost,电脑上运行时MySQL服务跑在本地电脑上,自然能正常连接。打包到安卓设备运行后,localhost指向的是安卓设备本身,安卓设备上没有部署MySQL服务,所以触发2003连接拒绝报错。连接失败后create_db_connection函数返回None,后续代码操作None对象调用cursor就触发了第二个属性错误。

解决方案

1. 修改数据库连接配置

把连接host从localhost替换为MySQL服务实际部署设备的IP地址:

  • 局域网测试场景:安卓设备和运行MySQL的电脑连同一个WiFi,填电脑的局域网IP(Windows可在cmd执行ipconfig查看,Linux/macOS执行ifconfig查看)
  • 公网使用场景:将MySQL部署到云服务器,填云服务器的公网IP
  • 额外配置:开放MySQL所在设备的3306端口防火墙规则,同时配置MySQL允许非本地IP访问,对应数据库账号的host权限要设置为%或者安卓设备的IP,不能仅允许localhost访问。

2. 新增连接失败拦截逻辑

你当前的代码没有判断连接状态就直接执行查询,极容易触发崩溃,需要增加非空判断:

connection = create_db_connection("MySQL服务实际IP", "yourusername", "yourpassword", "yourdbname")
# 新增连接失败判断
if not connection:
    # 弹出连接失败的用户提示,终止后续逻辑
    showConnectionErr()
    return
results = read_query(connection, q1)

3. 优化登录验证逻辑(强烈建议)

你当前的逻辑是查询全表所有用户再匹配账号密码,不仅运行效率极低,还存在严重的SQL注入风险,建议改成参数化条件查询:

# 参数化查询避免SQL注入,同时只查询匹配的用户数据
q1 = """
SELECT 1 FROM tablename WHERE firstcolumn = %s AND secondcolumn = %s
"""
params = (self.first_namee.text, self.password.text)
# 执行查询后仅判断是否有返回结果即可完成校验,无需拉取全表数据

4. 修正buildozer依赖配置

你当前的依赖里重复写了mysql.connector和mysql.connector.python,保留一个mysql-connector-python即可,避免打包时出现依赖冲突。

内容的提问来源于stack exchange,提问作者Ded Meme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:36:00