【问题标题】:Conversion to recommended parametrized query method转换为推荐的参数化查询方法
【发布时间】:2014-07-18 01:03:56
【问题描述】:

如您所见,我使用原始查询从数据库中获取数据

public ArrayList<GS> getSchedules() 
{
    try{
    Cursor c1 = sdb.rawQuery("SELECT DISTINCT * FROM Schedules", null);
    gs = new ArrayList<GS>();
    while (c1.moveToNext())
    {
        GS q1 = new GS();
        q1.setS_name(c1.getString(1));
        q1.setP_name(c1.getString(2));
        q1.setDesc(c1.getString(3));
        gs.add(q1);
    }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return gs;
}

此方法成功,但我想更改它以获得推荐的参数化查询方法?

对不起,如果我的问题没有显示任何研究工作,但我已经尝试过,但我迷路了。

提前谢谢..

【问题讨论】:

  • 您的查询中没有参数,因此您已经有了一个带有 0 个参数的参数化表单。
  • 这类查询query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cancellationSignal)
  • 虽然没有参数,但数据库通常更有效地将 * 替换为您实际需要的列的名称。这样就不需要打包额外的东西了。
  • 但是不鼓励使用rawQuery,我们应该使用query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cancellationSignal)类似的东西......
  • 为什么有人会推荐使用它而不是更简单、更高效且已经工作的东西?

标签: java android database


【解决方案1】:

您应该尽可能避免使用rawQuery...总是更喜欢内置的SQLiteDatabase 查询方法而不是rawQuery

所以你可以使用这个方法

public Cursor query (boolean distinct, String table, 
                         String[] columns, String selection, 
                         String[] selectionArgs, String groupBy, 
                         String having, String orderBy, String limit)

所以改变

Cursor c1 = sdb.rawQuery("SELECT DISTINCT * FROM Schedules", null);

Cursor c1 = sdb.query(true,"Schedules",null,null,null,null,null,null,null);

更多信息见Android sqlite query

注意:正如@Gabe Sechan 所建议的,在 DISTINCT 中,数据库通常更有效地用您实际需要的列的名称替换 *

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多