标签: cursor

为什么基于关系集的查询比游标更好?

当在TSQL或PLSQL之类的东西中编写数据库查询时,我们通常可以选择使用游标迭代行来完成任务,或者制作一个同时执行相同作业的单个SQL语句.

此外,我们可以选择简单地将大量数据拉回到我们的应用程序中,然后使用C#或Java或PHP或其他任何方式逐行处理.

为什么使用基于集合的查询更好?这个选择背后的理论是什么?什么是基于游标的解决方案及其关系等效的一个很好的例子?

sql language-agnostic cursor

32
推荐指数
4
解决办法
3万
查看次数

何时在Android中关闭光标?

我有一个应用程序,它使用游标从sqlite数据库中的rawQuery选择数据,以填充Android中的ListView; 每次用户点击listview项时,我都会创建一个新的Activity实例来重新填充listview.呼叫cursor.close()db.close()避免记忆问题更好吗?我实际上db.close()参与OnDestroy()了我的活动.

android cursor

32
推荐指数
2
解决办法
3万
查看次数

hl-line-mode emacs颜色变化

Emacs的hl-line-mode正是我需要的,但我想改变它的可怕的黄色,任何人都知道我该怎么做?

emacs colors line cursor

32
推荐指数
2
解决办法
9434
查看次数

为什么我会得到"名称已存在的游标"?

我有这个触发器:

CREATE TRIGGER CHECKINGMAXQTYDAYSVACANCY
    ON TDINCI
AFTER INSERT 
AS
    DECLARE
        @incidentCode int,
        @dateStart datetime,
        @dateEnd datetime,
        @daysAccumulated int,
        @maxDaysAvailable int

    set @daysAccumulated = 0;

    select @incidentCode = CO_INCI from inserted;
    select @maxDaysAvailable = IN_DIAS_GANA from TCINCI
        where CO_INCI = @incidentCode;

    declare detailsCursor CURSOR FOR
        select FE_INIC, FE_FINA from TDINCI
        where CO_INCI = @incidentCode;

    open detailsCursor;

    if CURSOR_STATUS('variable', 'detailsCursor') >= 0
    begin
        fetch next from detailsCursor
            into @dateStart, @dateEnd;

        while @@FETCH_STATUS = 0
        begin
            set @daysAccumulated = @daysAccumulated + (DATEDIFF(DAY, @dateStart, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server cursor

32
推荐指数
1
解决办法
4万
查看次数

Android游标中"fillWindow()中的无效语句"是什么意思?

我有时会在logcat输出中看到此错误,

Cursor: invalid statement in fillWindow().
Run Code Online (Sandbox Code Playgroud)

当我按下后退键然后listview在转到我的自定义之前它进入默认的Android时,有时会发生这种情况listview.

这是什么意思?我该如何解决?因为它没有指向问题来自的任何代码行.

android cursor

31
推荐指数
3
解决办法
1万
查看次数

如果列为null,SQLiteCursor会做什么?

我想从SQLite查询返回的Cursor中获取一个整数,但我知道整数可能为null.不幸的是我找不到允许我检查这个的任何Cursor方法.

代码将是

mModifiedDate = cursor.getInt(cursor.getColumnIndex(MODIFIED_DATE));
Run Code Online (Sandbox Code Playgroud)

我希望有一个可能的空值,这实际上是出于各种原因所希望的 - 字段是指第二个表被修改的时间,第一个表可以在第二个表之前填充.不幸的是,Cursor的文档说,无论是抛出异常,还是返回错误值,还是其他行为都留给实现,而SQLiteCursor文档没有说明任何内容.

如果该字段为空,此代码将执行什么操作?有没有办法在调用getInt()之前检查这个?

sqlite android cursor

31
推荐指数
2
解决办法
2万
查看次数

FAST_FORWARD游标何时会有一个工作表(这是否应该避免)?

背景

我注意到在尝试运行总查询时,有时估计的计划只显示"获取查询"

取

并且实际计划显示了聚集索引扫描的重复提取

获取扫描

在其他场合(例如,当向TOP查询添加a时),估计的计划显示填充工作表的"人口查询"阶段

获取并填充

实际计划显示聚集索引扫描以填充工作表,然后重复搜索该工作表.

寻求

  1. SQL Server在选择一种方法而不是另一种方法时使用了什么标准?
  2. 我是否正确地认为第一种方法(没有额外的工作表填充步骤)更有效率?

(额外的问题:如果有人能够解释为什么第一个查询中的每个扫描都算作2个逻辑读取,这可能也很有启发性)

附加信息

我在这里找到了这篇文章,它解释了FAST_FORWARD游标可以使用动态计划或静态计划.在这种情况下,第一个查询似乎是使用动态计划,第二个查询是静态计划.

我也发现,如果我尝试

SET @C2 = CURSOR DYNAMIC TYPE_WARNING FOR SELECT TOP ...
Run Code Online (Sandbox Code Playgroud)

光标被隐式转换为keyset游标,因此很明显TOP动态游标不支持该构造,也许是出于Ruben的答案的原因 - 仍在寻找对此的明确解释.

但是我还读到,动态游标往往比它们的静态对应物(源1,源2),这似乎让我感到惊讶,因为静态变种必须读取源数据,复制它,然后读取副本而不仅仅是读取源数据.我前面提到的文章提到了动态游标的使用.谁能解释一下这些是什么?它只是一个RID或CI键,还是不同的东西?markers

脚本

SET STATISTICS IO OFF

CREATE TABLE #T ( ord INT IDENTITY PRIMARY KEY, total INT, Filler char(8000))

INSERT INTO #T (total) VALUES (37),(80),(55),(31),(53)

DECLARE @running_total INT, 
    @ord INT, 
    @total …
Run Code Online (Sandbox Code Playgroud)

sql sql-server cursor sql-server-2008 database-performance

31
推荐指数
2
解决办法
2766
查看次数

忘记关闭和取消分配光标会发生什么?

将光标保持打开被称为不良做法.但是当你忘记关闭和/或解除分配时会发生什么?它如何影响SQL Server,连接/会话?使用游标的查询,存储过程和触发器的后果是否有任何差异?

t-sql sql-server cursor

31
推荐指数
3
解决办法
3万
查看次数

光标窗口:窗口已满

我已经创建了一个ListView,它由查询返回的数据填充.
它有效,但在LogCat中我收到了消息:

Cursor Window: Window is full: requested allocation 444 bytes, free space 363 bytes, window size 2097152 bytes
Run Code Online (Sandbox Code Playgroud)

它使用几分钟来加载/可视化ListView.

我的查询返回大约3700行String/Int/Double,每行包含30列; 没有图像或特定数据类型

这条消息究竟意味着什么,我该如何避免呢?
您可以通过更改此光标窗口来提高性能吗?

database android cursor android-listview

31
推荐指数
3
解决办法
2万
查看次数

Git Bash不会让我输入任何东西,只是显示一个闪烁的光标

我无法在Git-Bash命令行输入任何字符; 它显示的是一个闪烁的光标.Git Bash昨天工作正常,但我现在无法做任何事情.我该怎么做才能解决这个问题?

git cursor git-bash

31
推荐指数
2
解决办法
2万
查看次数