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

Android Studio Java操作MySQL查询时函数返回Null问题求助

问题原因与修复方案

1. 核心问题:SQL语句拼接语法错误

你拼接SQL的时候没有加必要的空格,最终生成的SQL语句是非法的,MySQL执行报错,接口返回非JSON结果,触发异常后直接返回了初始的"Null"值:
原拼接逻辑生成的错误SQL示例:

SELECT ... FROM PRIVEWHERE specialite LIKE ...OR nom LIKE ...OR adresse LIKE ...

PRIVE和WHERE直接连在一起、各OR条件前没有空格,完全不符合SQL语法规范。

2. 第二个触发异常的问题:SELECT字段缺失

你查询语句中只选择了8个字段:longitude,latitude, mobile, horaire,email,adresse,jours, type,但后续JSON解析时要读取specialite、nom两个未查询的字段,会直接抛出JSONException,导致逻辑中断返回初始值。

3. 额外隐患:SQL注入风险

直接在客户端拼接SQL语句并传输到服务端执行,存在严重的SQL注入漏洞,建议改为客户端仅传搜索关键词spec,SQL语句写在PHP服务端,并用参数绑定处理查询条件。

修复后的核心代码

仅修改SQL拼接部分即可解决返回Null的问题:

RequestBody formBody = new FormBody.Builder()
        .add("msg", "SELECT longitude,latitude, mobile, horaire,email,adresse,jours, type, specialite, nom "+
                " FROM PRIVE "+
                " WHERE specialite LIKE '%"+spec+"%' "+
                " OR nom LIKE '%"+ spec +"%' "+
                " OR adresse LIKE '%"+ spec +"%'")
        .build();

另外注意LatLng构造参数顺序错误,就算拿到数据标记位置也会偏移,正确写法应为:

// LatLng第一个参数是纬度latitude,第二个是经度longitude
LatLng mihoubi = new LatLng(Double.parseDouble(latitude), Double.parseDouble(longitude));

排查建议

你可以在catch块中增加日志打印,输出异常信息和接口返回的原始内容,可快速定位后续可能出现的问题:

catch (IOException | JSONException e) {
    e.printStackTrace();
    // 打印接口返回的原始内容
    if (response[0] != null && response[0].body() != null) {
        try {
            Log.d("RAW_RESPONSE", response[0].body().string());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:18:03