Tag: 游标

Android SQLite如何获取特定列:行值

我有一个数据库,我正在使用它进行查询 Cursor mCursor = mapDb.query(MY_TABLE, new String[] {KEY_ONEID, KEY_TWOID}, “trim(“+KEY_TWOID + “) != ” “, null, null, null, null); 在SQL术语中字面意思是: SELECT OneId, TwoId FROM auth WHERE trim(TwoId) != ” 使用原始SQL查询,这在我的SQLite浏览器中可以显示有问题的行,因此Cursor对象应该包含相同的结果。 其次在我的java方法中,我使用一个条件来检查这个结果是否有任何结果 if(mCursor.getColumnIndex(KEY_ONEID) > -1) //if > -1 then the mCursor returned a row { if(mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)) //breaks here return mCursor.getString(mCursor.getColumnIndex(KEY_TWOID)); else return “”; } 但由于某种原因,即使mCursor hashmap应该返回所有值,这是下一个条件语句 […]

使用带有JDBC和SQLServer的数据库API游标来选择批处理结果

已解决(见下面的答案。) 我在正确的背景下不理解我的问题。 真正的问题是我的查询返回了多个ResultSet对象,我之前从未遇到过这个问题。 我在下面发布了解决问题的代码。 问题 我有一个包含数千行的SQL Server数据库表。 我的目标是从源数据库中提取数据并将其写入第二个数据库。 由于应用程序内存限制,我无法一次性撤回数据。 此外,由于这个特定的表的模式(我无法控制),我没有办法使用某种ID列来勾选行。 数据库管理员StackExchange的一位绅士通过组合一个称为数据库API游标的东西来帮助我,并且基本上编写了这个复杂的查询,我只需要将我的语句放入其中。 当我在SQL Management Studio(SSMS)中运行查询时,它运行良好。 我得到了所有数据,一次一千行。 不幸的是,当我尝试将其转换为JDBC代码时,我只返回前千行。 题 是否可以使用JDBC检索数据库API游标,从中提取第一组行,允许游标前进,然后一次拉出一个后续集合? (在这种情况下,一次一千行。) SQL代码 这变得复杂,所以我要打破它。 实际查询可以是简单的也可以是复杂的。 没关系。 我在实验过程中尝试了几种不同的查询,它们都有效。 您只需将其放入适当位置的SQL代码中。 所以,让我们把这个简单的陈述作为我们的查询: SELECT MyColumn FROM MyTable; 实际的SQL数据库API游标要复杂得多。 我将在下面打印出来。 您可以在其中看到上面的查询: — http://dba.stackexchange.com/a/82806 DECLARE @cur INTEGER , — FAST_FORWARD | AUTO_FETCH | AUTO_CLOSE @scrollopt INTEGER = 16 | 8192 | 16384 , — […]

使用从游标获取的数据使用arrayList 填充ListView

Helo我试图使用sqLite中存储的数据填充listView。 在我选择了一个产品后,我希望该产品的所有参考文献都与我在图片中绘制的相同。 我可以让ArrayAdapter将所有记录放在同一个xml中吗? 我的代码如下所示:返回所有记录的游标: public Cursor getAllRows() { String where = null; // query the DBAdapter Cursor cursor = db.query(true, TABLE_NAME, ALL_KEYS, where, null, null, null, null, null); if (cursor != null) { cursor.moveToFirst(); } return cursor; } 将数据添加到arrayList: public ArrayList fromCursorToArrayListString(Cursor c){ ArrayList result = new ArrayList(); c.moveToFirst(); for(int i = 0; i < […]

使用SimpleCursorAdapter的Android ListView – 崩溃onResume

我在AcitivityA中有一个ListView ,它使用名为RecipeAdapter的自定义SimpleCursorAdapter RecipeAdapter 。 适配器保存来自SQLite数据 ListView顶部有一个EditText视图,用于在用户搜索配方时过滤listview。 当用户单击筛选的ListView的项目时, ActivityB启动。 一切都很完美。 但是,当用户按下后退按钮以恢复ActivityB ,我收到以下错误。 java.lang.IllegalStateException: trying to requery an already closed cursor android.database.sqlite.SQLiteCursor@418af170 我试图解决这个问题: 将onCreate()中的代码复制到onResume方法。 将c.requery()添加到onResume()方法 将db.close添加到onDestroy()方法 任何人都可以帮我解决我的问题吗? 这是我的代码: 在onCreate , cursor使用c.getCursor填充ListView ,当用户通过EditText过滤ListView ,使用c.getFilterCursor 。 public class RecipeActivity extends SherlockListActivity { private DBHelper db = null; private Cursor c = null; private RecipeAdapter adapter = null; ListView listContent; […]

Android – 如何从游标中删除项目?

假设我使用以下光标来获取某人的通话记录: String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME, android.provider.CallLog.Calls.CACHED_NUMBER_TYPE }; String strOrder = android.provider.CallLog.Calls.DATE + ” DESC”; Cursor mCallCursor = getContentResolver().query( android.provider.CallLog.Calls.CONTENT_URI, strFields, null, null, strOrder ); 现在我将如何删除此光标中的第i项? 这也可能是一个光标获取音乐列表等等。所以我必须问 – 这甚至可能吗? 我可以理解某些游标不允许第三方应用程序从中删除。 谢谢。

MongoDB:不能使用游标迭代所有数据

更新更新: 解决了 ! 看到这个: MongoDB:无法用游标迭代所有数据(因为数据已损坏) 它是由损坏的数据集引起的。 不是MongoDB或驱动程序。 ================================================== ======================= 我正在使用MongoDB(2.4.6)的最新Java驱动程序(2.11.3)。 我有一个包含约250M记录的集合,我想使用游标迭代所有这些记录。 但是,在10分钟左右之后,我得到了一个假的cursor.hasNext(),或者说服务器上没有光标的exception。 之后我了解了游标超时并用try / catch包装了我的cursor.next()。 如果在迭代所有记录之前有任何exception或hasNext()返回false,程序将关闭游标并分配一个新游标,然后再跳回上下文。 但后来我读到了关于cursor.skip()性能问题……而程序刚刚达到~20M记录,而cursor.skip()之后的cursor.next()抛出了“java.util.NoSuchElementException”。 我相信这是因为跳过操作已经超时,这使光标无效。 是的,我已经阅读过关于skip()性能问题和游标超时问题……但是现在我认为我处于两难境地,修复一个会打破另一个。 那么,有没有办法优雅地遍历庞大数据集中的所有数据? @mnemosyn已经指出我必须依赖基于范围的查询。 但问题在于我想将所有数据分成16个部分并在不同的机器上处理它们,并且数据不是均匀分布在任何单调密钥空间内。 如果需要负载平衡,必须有一种方法来计算特定范围内的密钥数量并平衡它们。 我的目标是将它们分成16个部分,所以我必须找到四分位数的四分位数(对不起,我不知道是否有一个数学术语),并使用它们来分割数据。 有没有办法实现这个目标? 当通过获得分区边界键实现第一次搜索时,我确实有一些想法。 如果新光标再次超时,我可以简单地记录最新的tweetID并重新开始使用新范围。 但是,范围查询应该足够快,否则我仍然会超时。 我对此并不自信…… 更新: 问题解决了! 我没有意识到我不必以粗糙的方式对数据进行分区。 循环工作调度员会这样做。 请参阅接受的答案中的评论。

你如何从光标中获取类型?

javadocs表明android.database.Cursor有一个getType(int)方法。 但是,当我尝试调用此方法时,Eclipse会给出一个错误,指出不存在任何方法。 是什么赋予了?

关闭结果集后,Oracle不会删除游标

注意:我们重用单一连接。 ************************************************ public Connection connection() { try { if ((connection == null) || (connection.isClosed())) { if (connection!=null) log.severe(“Connection was closed !”); connection = DriverManager.getConnection(jdbcURL, username, password); } } catch (SQLException e) { log.severe(“can’t connect: ” + e.getMessage()); } return connection; } ************************************************** public IngisObject[] select(String query, String idColumnName, String[] columns) { Connection con = connection(); […]

使用JDBC将SYS_REFCURSOR作为IN参数调用PL / SQL过程

我试图理解如何调用PL / SQL过程,该过程将SYS_REFCURSOR作为IN参数。 请考虑以下PL / SQL过程: print_cursor_contents(myCursor SYS_REFCURSOR , row_count OUT NUMBER); 在将值绑定到IN参数时,我使用setXXX方法? 给我一个带有单独游标记录字段的java类,因为它的成员和这个类的实例数组似乎是表示plsql CURSOR的正确方法。 当我这样做时,我得到一个SQLException: 我使用了以下set方法 callStmt.setObject(1, curRec); 以下是使用上述语句时的例外情况: Exception occured in the database Exception message: Invalid column type java.sql.SQLException: Invalid column type at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8921) at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8396) at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:9176) at oracle.jdbc.driver.OracleCallableStatement.setObject(OracleCallableStatement.java:5024) at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:234) at com.rolta.HrManager.printMaxSalAllDept(HrManager.java:1022) at com.rolta.HrManager.main(HrManager.java:1116) Database error code: 17004

Java注释在方法之前和之后执行一些代码

我正在编写一个swing应用程序,并且我想在执行某些方法时使用’wait’光标。 我们可以这样做: public void someMethod() { MainUI.getInstance().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); //method code MainUI.getInstance().setCursor(Cursor.getDefaultCursor()); } 我想要实现的是一个java注释,它会在方法执行之前设置等待光标,并在执行后将其设置回正常状态。 所以前面的例子看起来像这样 @WaitCursor public void someMethod() { //method code } 我怎样才能做到这一点? 关于解决这个问题的其他变体的建议也是受欢迎的。 谢谢! PS – 我们在项目中使用Google Guice,但我不知道如何使用它来解决问题。 如果有人会向我提供类似问题的简单示例,那将非常有帮助