Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
语句准备中的Sqlite pendingOperation_Sqlite_Blackberry_Java Me - Fatal编程技术网

语句准备中的Sqlite pendingOperation

语句准备中的Sqlite pendingOperation,sqlite,blackberry,java-me,Sqlite,Blackberry,Java Me,我的代码是: Statement mstatement = null; URI uri = URI.create(DBPath); sqliteDb = DatabaseFactory.openOrCreate(uri); mStatement = sqliteDb.createStatement(strQuery); mStatement.prepare(); 我的问题是,在msstatement.prepare();,我得到的错误是“Sqlite pendingOperation”;。

我的代码是:

Statement mstatement = null;
URI uri = URI.create(DBPath);
sqliteDb = DatabaseFactory.openOrCreate(uri);

mStatement = sqliteDb.createStatement(strQuery);
mStatement.prepare();
我的问题是,在msstatement.prepare();,我得到的错误是“Sqlite pendingOperation”;。
我在每个数据库处理方法中使用同步块。这是在多个线程运行时发生的。

我自己得到了答案

我将所有方法修改为(粗体):

Cursor c = null;
DBHelper.mStatement = null;
Vector followups = new Vector();
**boolean runFlag = true;**
synchronized (GlobalVariables.lockObject) {
try {
**while(runFlag)**
SELECT EventId,OldTitle,OrderNumber,Status,Title,Type,UpdateDateTime,Id FROM Questions WHERE EventId=5 AND Type=1 AND (Status=0 OR Status=1 OR Status=2) ORDER BY OrderNumber 

                DBHelper.CreateAndOpenSqliteDBConnection();
DBHelper.mStatement = DBHelper.sqliteDb.createStatement(strQuery);
DBHelper.mStatement.prepare();

**if(DBHelper.mStatement == null)
    {
        DBHelper.CloseSqliteDBConnection();
                        runFlag = true;
                        continue;
                    }
                    else
                    {
                        runFlag = false;
                    }**

c = DBHelper.mStatement.getCursor();

while (c.next()) {
                    followups.addElement(Followup.getFromCursor(c));
                }
}
**}**
catch (Exception ex) {
System.out.print(ERRORSTRING + "getUploadFollowupsFromDB: "
                        + ex);
} finally {

DBHelper.CloseSqliteDBConnection();
}
GlobalVariables.lockObject.notifyAll();
}
return followups;

伟大的Ankit Rox..

您能包含整个异常消息吗?此外,包括“strQuery”中显示的实际字符串也会有所帮助。我的查询是:从EventId=5和Type=1的问题中选择EventId、OldTitle、OrderNumber、Status、Title、Type、UpdateDateTime、Id,并且(Status=0或Status=1或Status=2)ORDER BY OrderNumber错误是:SqlitependingOperation@AnkitRox:请在示例中添加更多代码。这将包括设置strQuery
。另外,正如Michal Donohue所说,请包括完整的错误消息,最好包括堆栈跟踪。Hi sixfeetsix:我已经添加了我的注释作为答案,请检查。
boolean runFlag
最好声明为volatile(如果您感兴趣,请查看多线程Java教程,为什么会这样)但是,需要什么使其易失性。为了保证从其他线程对其进行的更新不会产生影响,不需要,因为存在同步块,并且在单个时间单位,一个线程将进入块,并且RUNFALG对于块的每次执行都是独立的。因此,您只能在同步块内读/写
runFlag
,对吗?在这种情况下,没有波动性是可以的