2014-12-25 4 views
1

Обновлены на комментатор вопросы:SQLite вставка нуля вместо требуемого значения

Я пытаюсь вставить значения в таблицу SQLite, но когда я получать это значение, это выглядит как пустая становятся вставлено вместо этого.

Вызов, чтобы вставить строку и выборок/регистрировать все существующие строки выше дан как:

@Override 
public void onClick(View v) { 
    Deck deck = new Deck(mDeckNameText.getText().toString()); 
    dbHandler.addDeck(deck); 

    List<Deck> allDecks = dbHandler.getAllDecks(); 
    Log.d("Get Decks", "Getting all decks"); 

    for (Deck one_deck: allDecks){ 
     int deck_id = one_deck.getDeckId(); 
     String deck_id_string = ""+deck_id; 
     Log.d("ID: ", deck_id_string); 

     String deck_name = one_deck.getDeckName(); 
     if (deck_name != null) { 
      Log.d("Name: ", deck_name); 
     } 
     else { 
      Log.d("Name: ", "null"); 
     } 
    } 
} 

Метод addDeck, чтобы вставить строку (которая в моем обработчике базы данных) выглядит следующим образом :

void addDeck(Deck deck) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_DECK_NAME, deck.getDeckName()); 

    db.insert(TABLE_DECKS,null,values); 
} 

Где класс Deck определяется как:

public class Deck { 

    int _deck_id; 
    String _deck_name; 

    public Deck(){ 
    } 

    public Deck(String deck_name) { 
     this._deck_name = deck_name; 
    } 

    public Deck(int deck_id, String deck_name) { 
     this._deck_id = deck_id; 
     this._deck_name = deck_name; 
    } 

    //get deck_id 
    public int getDeckId(){ 
     return this._deck_id; 
    } 

    //set deck_id 
    public void setDeckId(int deck_id){ 
     this._deck_id = deck_id; 
    } 

    //get deck name 
    public String getDeckName(){ 
     return this._deck_name; 
    } 

    //set deck name 
    public void setDeckName(String deck_name){ 
     this._deck_name = deck_name; 
    } 
} 

таблицы видно, что содер нс палубы создается следующим способом:

public void onCreate(SQLiteDatabase db) { 
    String CREATE_DECKS_TABLE = "CREATE TABLE "+TABLE_DECKS+"(" 
      +KEY_DECK_ID+" INTEGER PRIMARY KEY, "+KEY_DECK_NAME 
      +" TEXT"+")"; 

    db.execSQL(CREATE_DECKS_TABLE); 
} 

методы для извлечения палуб являются следующие:

//get single deck 
public Deck getDeck(long deck_id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    String selectQuery = "SELECT * FROM " + TABLE_DECKS + " WHERE " 
      + KEY_DECK_ID + " = " + deck_id; 

    Log.e(LOG, selectQuery); 

    Cursor c = db.rawQuery(selectQuery, null); 

    if (c != null) 
     c.moveToFirst(); 

    Deck deck = new Deck(); 
    deck.setDeckId(c.getInt(c.getColumnIndex(KEY_DECK_ID))); 

    return deck; 
} 

//get all decks 
public List<Deck> getAllDecks() { 
    List<Deck> deck_list = new ArrayList<Deck>(); 
    String selectQuery = "SELECT * FROM " + TABLE_DECKS; 

    Log.e(LOG, selectQuery); 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor c = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (c.moveToFirst()) { 
     do { 
      Deck deck = new Deck(); 
      deck.setDeckId(c.getInt((c.getColumnIndex(KEY_DECK_ID)))); 

      // adding to decks 
      deck_list.add(deck); 
     } while (c.moveToNext()); 
    } 

    return deck_list; 
} 

Выход журнала я получаю, когда я получать палубных идентификаторы и имена палубных из строки в моей таблице выглядит следующим образом (после третьей попытки при вставке колоду):
D/ID :: 1
D/Имя :: Null
D/ID :: 2
D/Имя :: null
D/ID :: 3
D/Имя :: Null

Любая идея, почему имя возвращается в нуль?

Заранее спасибо.

+0

где код, который вы используете для получения данных из sqlite? в вашем onclick вы создаете новый объект, у которого есть пустой deckname. – krispymallows

+0

. Deckname не создается для mDeckNameText.getText(). toString()? –

+0

Я также обновил вопрос, чтобы включить код, который я использую для извлечения данных из sqlite. Еще раз спасибо! –

ответ

0

Вам нужно добавить строку в выборках коды:

deck.setDeckName(c.getString((c.getColumnIndex(KEY_DECK_NAME)))); 

Добавить это в getDeck прямо перед возвращения заявления

я написал из памяти Надеется, что это помогает Пожалуйста, оцените если да

+1

Я не могу голосовать, потому что у меня недостаточно очков репутации. Когда я это сделаю, я вернусь и проголосую! Спасибо! –

+0

Спасибо, отметив, что ответили лучше, чем голосовать – Yitzchak

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