2014-01-07 5 views
0

У меня есть ошибка в отношении базы данных, как показано ниже: E/CursorWindow (386): Плохой запрос для слота поля 0, -1. NumRows = 1, numColumns = 63Ошибка подключения к обработчику базы данных

вот мой кусок кода:

общественного класса DatabaseHandler расширяет SQLiteOpenHelper {

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 
// Database Name 
private static final String DATABASE_NAME = "contactsManager"; 
// Contacts table name 
private static final String TABLE_CONTACTS = "contacts"; 
// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_IMAGE = "image"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_PH_NO = "phone_number"; 
public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," 
      + KEY_IMAGE + " BLOB," 
      + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* All CRUD(Create, Read, Update, Delete) Operations 
*/ 

// Adding new contact 
void addContact(Methods contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_IMAGE,contact.getImageId()); 
    values.put(KEY_NAME, contact.getName()); // Contact Name 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone 

    // Inserting Row 
    db.insert(TABLE_CONTACTS, null, values); 
    db.close(); // Closing database connection 
} 

// Getting single contact 
Methods getContact(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,KEY_IMAGE, 
      KEY_NAME, KEY_PH_NO }, KEY_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    Methods contact = new Methods(Integer.parseInt(cursor.getString(cursor.getColumnIndex(KEY_ID))), 
      cursor.getBlob(cursor.getColumnIndex(KEY_IMAGE)),cursor.getString(cursor.getColumnIndex(KEY_NAME)), cursor.getString(cursor.getColumnIndex(KEY_PH_NO))); 
    // return contact 
    cursor.close(); 
    return contact; 
} 

// Getting All Contacts 
public List<Methods> getAllContacts() { 
    List<Methods> contactList = new ArrayList<Methods>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Methods contact = new Methods(); 
      contact.setID(Integer.parseInt(cursor.getString(0))); 
      contact.setImageId(cursor.getBlob(1)); 
      contact.setName(cursor.getString(2)); 
      contact.setPhoneNumber(cursor.getString(3)); 

      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    db.close(); 
    // return contact list 
    return contactList; 
} 

/*// Updating single contact 
public int updateContact(Methods contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
}*/ 

// Deleting single contact 
    public void deleteContact(Methods contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_CONTACTS, KEY_ID + " = ?", 
       new String[] { String.valueOf(contact.getID()) }); 
     db.close(); 
     Log.v("deleteContact", "Deleted row is: "+String.valueOf(contact.getID())); 
    } 

void deleteAll(Methods contact) 
{ 
    SQLiteDatabase db= this.getWritableDatabase(); 
    db.delete(TABLE_CONTACTS, null, null); 
    db.close(); 

} 
// Getting contacts Count 
public int getContactsCount() { 
    String countQuery = "SELECT * FROM " + TABLE_CONTACTS; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 

    // return count 
    return cursor.getCount(); 
} 

}

+0

Заранее благодарю, если кто-нибудь поможет ........ –

ответ

0

Это помогло бы иметь больше информации здесь (а стек следы возможно?). Однако, похоже, вы не предоставляете «id» при добавлении контакта. Подумайте о том, чтобы этот столбец автоматически увеличивался.

Последнее, если это вопрос с Android, ваш первичный ключевой столбец должен автоматически увеличиваться и должен быть вызван «_id», иначе убедитесь, что это указано как имя столбца в любом курсоре, возвращаемом из запроса. Также проверьте, что в вашей базе данных есть таблица с названием «android_metadata».

+0

вы можете написать запрос на добавление контакта по мере необходимости в моем примере и не хочу ли я изменить имя id как _id в моей базе данных ?? –

+0

@ user1478187 Если вы еще этого не сделали, и снова считаете, что это на самом деле вопрос Android (мы обсуждаем здесь класс SQLiteOpenHelper, так что это правдоподобно), как и все остальные, вам нужно прочитать основы от разработки для Android, прежде чем спрашивать. – SK9

+0

да, я знаю основы андроида, но просто хочу получить запрос, какой другой совет решить мою описанную выше проблему ...... так что если кто-нибудь поможет ей! –

Смежные вопросы