2012-03-16 45 views
2

打开 数据库后,出现游标索引超出界限的错误。请任何人告诉我如何打开 sqllite - Android中的现有数据库。我想在数据库上启动一个选择查询并检索一些信息?游标索引超出范围

  public void getPatient(SQLiteDatabase db, String name) { 
    // TODO Auto-generated method stub 
    db=this.getReadableDatabase(); 
    //db.open(); 
    System.out.println("in cursooooooooorrrrrrrrr"); 
    Cursor c = db.rawQuery("SELECT * from table_patient WHERE COL_Name"+"=?", 
      new String []{name});   
    //c.moveToFirst(); 

    int index = c.getColumnIndex("COL_FirstName"); 
    System.out.println("First Name : ----------- "+c.getString(index)); 
    c.close(); 


} 

回答

3

像这样做:

int index = 0; 

if(c.moveToFirst()) 
    index = c.getColumnIndex("COL_FirstName"); 
+0

及其打印索引= 0。请你能告诉我如何检查是否打开了正确的数据库,以及数据库中是否有数据 – Rish 2012-03-16 14:39:00

+1

似乎你的查询没有返回任何记录。尝试改变你的查询是这样的:'Cursor c = db.rawQuery(“SELECT * FROM table_patient WHERE COL_Name LIKE?”,new String [] {name});'' – waqaslam 2012-03-16 14:42:47

0

您必须取消注释c.moveToFirst()。

这里的示例:

public WhoisEntry[] getAllEntries(){   
    SQLiteDatabase db = getReadableDatabase(); 
    String sql = "SELECT * FROM domains_events"; 
    Cursor result = db.rawQuery(sql, null); 
    WhoisEntry[] resultArray = new WhoisEntry[result.getCount()]; 
    int i=0; 
    result.moveToFirst(); 
    while (i< result.getCount()){ 
     long date = result.getLong(result.getColumnIndex("exp_date")) * 1000; 
     String domainName = result.getString(result.getColumnIndex("domainname")); 
     resultArray[i] = new WhoisEntry(domainName, new Date(date)); 
     //resultArray[i].domainName = 
     //resultArray[i].expirationDate = result.getString(result.getColumnIndex("exp_date")); 
     String name = result.getString(result.getColumnIndex("domainname")); 
     i++; 
    } 
    return resultArray; 
}