私は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ある問題は、データベースは次のいずれかなしに最初に作成しましたフィールド。
logcatエラースタックトレースを追加してください –
"データベース"と "MySQLiteHelper.TABLE_ITEM"の宣言を忘れてしまった – Gangnus
データベースが唯一であるため2でコードを実行する前に、更新されずに更新されましたエミュレータからDBファイルを取り出し、sqlite.exeを使用して、すべての列が正しく作成されていることを確認してください。 –