首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android光标索引越界异常

Android光标索引越界异常
EN

Stack Overflow用户
提问于 2013-07-14 02:35:20
回答 3查看 15.5K关注 0票数 3

这段代码有什么问题吗?我想使用条形码查询数据,它显示了光标索引越界异常。

代码语言:javascript
复制
public String getIdByBarcode(String ss) throws SQLException{
    String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date};
    Cursor c = ourDatabase.query(TABLE_NAME, column, Pro_Barcode + "= '" + ss + "' " , null, null, null, null);

    if(c != null){
        c.moveToFirst();
        String id = c.getString(0);
        Log.v(id, id + "Id" );
        return id;
    }
    return null;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-14 02:41:43

Cursor中没有结果。您应该检查moveToFirst()返回的内容(最有可能是false)。此外,您应该使用moveToNext(),而不是moveToFirst()。还要注意,您没有检查ss参数。这可能导致SQL注入漏洞。您应该使用参数。另外,我认为你可以在你的方法中使用一个返回。

代码语言:javascript
复制
public String getIdByBarcode(String ss) throws SQLException {
    String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date};
    final String args = new String[1];
    args[0] = ss;
    Cursor c = ourDatabase.query(TABLE_NAME, column, Pro_Barcode + " = ?" , args, null, null, null);
    String ret = null;
    if(c.moveToNext()) {
        ret = c.getString(0);     
    }
    return ret;
}
票数 10
EN

Stack Overflow用户

发布于 2013-07-14 02:44:38

有关moveToFirst()方法的文献:

公共抽象布尔moveToFirst ()将光标移动到第一行。如果光标为空,此方法将返回false。

如果移动成功,将返回

所以你的moveToFirst调用失败了(因为cusrsor有0个元素),这就是崩溃的原因。

执行以下操作:

代码语言:javascript
复制
if(c != null && c.moveToFirst()) {
    String id = c.getString(0);
    Log.v(id, id + "Id" );
    return id;
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-14 02:41:30

尝尝这个

代码语言:javascript
复制
String id;
if (c!= null && c.moveToNext){
   String id = c.getString(0);
   return id;   
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17633091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档