2012-03-12 11 views
0

私はhttp://www.vogella.de/articles/AndroidSQLite/article.htmlチュートリアルを次のようです。私は現在、システムを変更してフィールド 'コメント'だけでなく、項目 '項目'と '価格'を変更しようとしています。Androidのsqliteのカーソル問合せ

私は2つのColoumsが1つではなく、カーソルがアプリをクラッシュさせているようです。ここで例えば は、以下のコードです:

 public List<Item> getAllItems() { 
      List<Item> items = new ArrayList<Item>(); 
      Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS, 
        allColumns, null, null, null, null, null); 
      cursor.moveToFirst(); 

      while (!cursor.isAfterLast()) { 
       Item item = cursorToItem(cursor); 
       items.add(item); 
       cursor.moveToNext(); 
      } 
      // Make sure to close the cursor 
      cursor.close(); 
      return items; 
     } 

     private Item cursorToItem(Cursor cursor) { 
      Item item = new Item(); 
      item.setId(cursor.getLong(0)); 
      item.setItem(cursor.getString(1)); 
      item.setPrice(cursor.getString(2)); 
      return item; 
     } 

LINE:

Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS, 
        allColumns, null, null, null, null, null); 

は、エラーの原因となっているものですが、私はそれは私が追加の列を持っているという事実とは何かを持っていると信じています。誰かがこの行を編集する方法を私に教えてもらえますか?私は試しましたが、このカーソルクエリーを理解していません。

EDIT:それは走ったヌルでallcolumnsを置き換えることによって。しかし、今のは上のクラッシュ:オンライン上の

public Item createItem(String item, String price) { 
     ContentValues values = new ContentValues(); 
     values.put(MySQLiteHelper.COLUMN_ITEM, item); 
     values.put(MySQLiteHelper.COLUMN_PRICE, price); 
     long insertId = database.insert(MySQLiteHelper.TABLE_ITEMS, null, 
       values); 
     // To show how to query 
     Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS, 
       allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null, 
       null, null, null); 
     cursor.moveToFirst(); 
     return cursorToItem(cursor); 
    } 

package nupos.nupay.app; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class MySQLiteHelper extends SQLiteOpenHelper { 

public static final String TABLE_ITEMS = "items"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_ITEM = "item"; 
public static final String COLUMN_PRICE = "price"; 

private static final String DATABASE_NAME = "items_test.db"; 
private static final int DATABASE_VERSION = 1; 

// Database creation sql statement 
private static final String DATABASE_CREATE = "create table " 
     + TABLE_ITEMS + "(" + COLUMN_ID 
     + " integer primary key autoincrement, " + COLUMN_ITEM 
     + " text not null," + COLUMN_PRICE 
     +" text not null);"; 

public MySQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase database) { 
    database.execSQL(DATABASE_CREATE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w(MySQLiteHelper.class.getName(), 
      "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS); 


    onCreate(db); 
} 

} 

編集:

ここ
Cursor cursor = database.query(MySQLiteHelper.TABLE_ITEMS, 
       allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null, 
       null, null, null); 

はMySQLHelper.jsある問題は、データベースは次のいずれかなしに最初に作成しましたフィールド。

+0

logcatエラースタックトレースを追加してください –

+0

"データベース"と "MySQLiteHelper.TABLE_ITEM"の宣言を忘れてしまった – Gangnus

+0

データベースが唯一であるため2でコードを実行する前に、更新されずに更新されましたエミュレータからDBファイルを取り出し、sqlite.exeを使用して、すべての列が正しく作成されていることを確認してください。 –

答えて

1

IMHO、allColumnsは、定義に従わない。参加するすべてのオブジェクトの宣言と現在の値をここに入れます。

もう1つの可能性 - databaseオブジェクトが正しく初期化されておらず、現時点ではnullです。あなたはそのような状況を確認する必要があります。

関連する問題