加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite query & rawQuery

发布时间:2020-12-12 19:52:46 所属栏目:百科 来源:网络整理
导读:场景: 今天在写代码的时候被责令重构,凡是使用rawQuery的地方一律改为使用query,原因无他,可防SQL注入,并且由于query的参数一段段都是分开的,所以推荐使用Query。 比如我要查询我数据库里某张表最后一条状态为onGoing状态的数据代码如下: rawQuery pu

场景:

今天在写代码的时候被责令重构,凡是使用rawQuery的地方一律改为使用query,原因无他,可防SQL注入,并且由于query的参数一段段都是分开的,所以推荐使用Query。


比如我要查询我数据库里某张表最后一条状态为onGoing状态的数据代码如下:

  • rawQuery
  public Visit getLastData() {
        //todo
        Cursor cursor = database.rawQuery("SELECT * FROM " + table + 
" where status = "+Visit.STATUS_ONGOING+
" ORDER BY android_id DESC LIMIT 1",null);
        cursor.moveToFirst();
        return cursorToEntity(cursor);
    }


 
自己拼接SQL语句,一不小心就会写错. 
 
 
  • Query
     /**
     * get last ongoing visit in database.
     * @return
     */
    public Visit getLastOngoingVisit() {
        String[] columns = null;
        String selection = VisitDB.Visit.COLUMN_STATUS + "=?";
        String[] selectionArgs = {String.valueOf(Visit.STATUS_ONGOING)};
        String orderby = VisitDB.Visit.COLUMN_ANDROID_ID+" DESC";
        String limit = "1";
        Cursor cursor = database.query(table,columns,selection,selectionArgs,null,orderby,limit);
        cursor.moveToFirst();
        return cursorToEntity(cursor);
    }

这样似乎很清晰吧

关于query各个参数说明

 /**
     * Query the given table,returning a {@link Cursor} over the result set.
     *
     * @param table The table name to compile the query against.
     * @param columns A list of which columns to return. Passing null will
     *            return all columns,which is discouraged to prevent reading
     *            data from storage that isn't going to be used.
     * @param selection A filter declaring which rows to return,formatted as an
     *            SQL WHERE clause (excluding the WHERE itself). Passing null
     *            will return all rows for the given table.
     * @param selectionArgs You may include ?s in selection,which will be
     *         replaced by the values from selectionArgs,in order that they
     *         appear in the selection. The values will be bound as Strings.
     * @param groupBy A filter declaring how to group rows,formatted as an SQL
     *            GROUP BY clause (excluding the GROUP BY itself). Passing null
     *            will cause the rows to not be grouped.
     * @param having A filter declare which row groups to include in the cursor,*            if row grouping is being used,formatted as an SQL HAVING
     *            clause (excluding the HAVING itself). Passing null will cause
     *            all row groups to be included,and is required when row
     *            grouping is not being used.
     * @param orderBy How to order the rows,formatted as an SQL ORDER BY clause
     *            (excluding the ORDER BY itself). Passing null will use the
     *            default sort order,which may be unordered.
     * @param limit Limits the number of rows returned by the query,*            formatted as LIMIT clause. Passing null denotes no LIMIT clause.
     * @return A {@link Cursor} object,which is positioned before the first entry. Note that
     * {@link Cursor}s are not synchronized,see the documentation for more details.
     * @see Cursor
     */
对于Sqlite的limit跟mysql还是有区别的,有个offset关键字,可忽略多少条记录进行查询多少条数据,具体的不赘述,自己实验使用吧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读