Android 执行一个新的SQLite查询时仍然在游标上迭代一个先前的查询是否安全?(安卓)

Android 执行一个新的SQLite查询时仍然在游标上迭代一个先前的查询是否安全?(安卓),android,sqlite,Android,Sqlite,我调用SQLiteDatabase.query并获得一个游标。当我仍在该游标上迭代时,从同一线程发出其他查询是否安全?不会有两个查询同时在同一个表上执行。它是内置的同步方法,因此一次只执行一个查询。第二个查询将处于等待状态,直到第一个查询完成执行 是的。您可以从同一个线程中拥有多个未完成的查询,并独立地访问每个游标 我将以下代码添加到测试活动中,并按预期运行: SQLiteDatabase connection = getApplicationContext().openOrCreateData

我调用SQLiteDatabase.query并获得一个游标。当我仍在该游标上迭代时,从同一线程发出其他查询是否安全?

不会有两个查询同时在同一个表上执行。它是内置的同步方法,因此一次只执行一个查询。第二个查询将处于等待状态,直到第一个查询完成执行

是的。您可以从同一个线程中拥有多个未完成的查询,并独立地访问每个游标

我将以下代码添加到测试活动中,并按预期运行:

SQLiteDatabase connection = getApplicationContext().openOrCreateDatabase("foo.db", MODE_PRIVATE, null);
try {
    connection.execSQL("drop table if exists person");
    connection.execSQL("create table person (id integer, name string)");
    ContentValues cv = new ContentValues();
    cv.put("id", 1);
    cv.put("name", "leo");
    connection.insert("person", null, cv);
    cv = new ContentValues();
    cv.put("id", 2);
    cv.put("name", "yui");
    connection.insert("person", null, cv);

    Cursor rs = connection.query("person", new String[] {"id", "name" }, null, null, null, null, null);

    while(rs.moveToNext())
    {
        System.out.println("name = " + rs.getString(1));
        System.out.println("id = " + rs.getString(0));

        Cursor rs2 = connection.query("person", new String[] {"id", "name" }, null, null, null, null, null);
        while (rs2.moveToNext()) {
            System.out.println("name = " + rs2.getString(1));
            System.out.println("id = " + rs2.getString(0));
        }
    }
} catch (Exception e) {
    System.out.println("Exception " + e);
}

-我认为这个答案是错误的。从同一个线程中,可以有多个优秀的查询并独立地访问每个CURSOREST。BTW星期日StasPosivsPar?DITKIN用他的代码演示,这个答案是不正确的。我想路西法误解了这个问题。在这个场景中只有一个线程在执行。同意他的代码,但根据您的问题要求,我的答案是正确的@特拉维斯:这并不能回答问题。OP并没有讨论同一个表——只是讨论不同的查询。同样,OP也不是在讨论多线程的情况。我认为您接受的答案是不正确的。请参阅下面我的答案中的示例代码。在执行过程中,两个游标不会同时执行,当outter游标运行时,内部游标将处于等待位置,而vice version@TravisI尝试了ditkin的代码,结果正常:第一个查询在第二个查询执行时不会失去位置,这正是我所担心的(或者更糟的是,异常或死锁)。我不确定您所指的等待位置是什么。只有一个线程,因此显然不会有任何并发或后台执行。在后台,两个游标将逐个执行。OP询问是否可以安全地从同一线程执行其他查询。这是。sa同时执行一个查询和一个游标给我一根线,请仔细阅读。