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

如何在Android Studio中用Java从SQLite指定列获取最长字符串?

解决SQLite获取某列最长字符串及对应行ID的问题

问题根源

你之前的SQL语句里把列名_name用单引号括起来了,SQL会把'_name'当成字符串字面量,而不是表的列引用,所以返回的是字符串"_name"(长度为5),而非列中的实际数据。

解决方案

下面提供两种可行的写法,按需选择:

方法1:按字符串长度倒序取第一条

这种写法简单直接,会返回长度最长的第一行数据,同时拿到_id、目标字符串和长度:

public Cursor getLongest() {
    // 去掉列名的单引号,同时选中_id方便获取对应行
    String sql = "SELECT _id, _name, LENGTH(_name) AS length FROM tblMain ORDER BY length DESC LIMIT 1;";
    Cursor cur = db.rawQuery(sql, null);
    if (cur != null) {
        cur.moveToFirst();
    }
    return cur;
}

调用时可以这样获取数据:

Cursor c = db.getLongest();
if (c != null && c.getCount() > 0) {
    int id = c.getInt(0);
    String longestName = c.getString(1);
    int length = c.getInt(2);
    Log.v("longest name", "ID: " + id + " ~ 最长字符串: " + longestName + " ~ 长度: " + length);
}

方法2:匹配最大长度的所有行

如果存在多个长度相同的最长字符串,上面的方法只会返回第一行,用这种子查询的方式可以返回所有符合条件的行:

public Cursor getLongest() {
    String sql = "SELECT _id, _name, LENGTH(_name) AS length FROM tblMain WHERE LENGTH(_name) = (SELECT MAX(LENGTH(_name)) FROM tblMain);";
    Cursor cur = db.rawQuery(sql, null);
    if (cur != null) {
        cur.moveToFirst();
    }
    return cur;
}

调用时可以循环遍历Cursor获取所有结果:

Cursor c = db.getLongest();
if (c != null && c.moveToFirst()) {
    do {
        int id = c.getInt(0);
        String longestName = c.getString(1);
        int length = c.getInt(2);
        Log.v("longest name", "ID: " + id + " ~ 最长字符串: " + longestName + " ~ 长度: " + length);
    } while (c.moveToNext());
}

额外说明

  • SQLite中,表名和列名不需要用单引号包裹,除非是包含特殊字符的标识符(此时用反引号`或者双引号更规范)。
  • 记得在使用完Cursor后调用close()释放资源,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:09:55