0

これは私のDatabaseHelperクラスです

public class DatabaseHelper extends SQLiteOpenHelper {

    static final String dbName="demoDB";

    public DatabaseHelper(Context context) {
            super(context, dbName, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
            String sql = "CREATE TABLE IF NOT EXISTS players (" +
                                            "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                                            "playerName TEXT)";
            db.execSQL(sql);

            ContentValues values = new ContentValues();

            values.put("playerName", "John");
            db.insert("players", "playerName", values);

            values.put("playerName", "George");
            db.insert("players", "playerName", values);

            values.put("firstName", "Marie");
            db.insert("players", "playerName", values);
            System.out.println("Hello");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS players");
            onCreate(db);
    }

}

そして私の主な活動では、これは私がそのデータを取得するために行うことです。

if (cursor!= null) {
            if (cursor.moveToFirst()) {
                do {
                     System.out.println(cursor.getString(cursor.getColumnIndexOrThrow("playerName")));            
                } while (cursor.moveToNext());
            }
        }

なぜ列が作成されないのですか?そして私はこの例外を受け取っています。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mkyong.android/com.mkyong.android.Stats}: java.lang.IllegalArgumentException: column 'playerName' does not exist
4

1 に答える 1

1

カーソルを操作する前に何かを選択していますか?カーソルは「Select...」SQL呼び出しの結果である必要がありますが、DatabaseHelperまたはMainActivityに、何らかの選択を行っていることを示すものが表示されません。

また、テーブルに値を挿入する場合、2番目のパラメーターはnull[ db.insert("players", null, values)]である必要があると思います。これはnullColumnHack、行にデータを入力しない場合に使用するを対象としています。

nullColumnHack  optional; may be null. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided values is empty, no column names are known and an empty row can't be inserted. If not set to null, the nullColumnHack parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your values is empty. 

編集

さて、これまでにテーブルを作成し、いくつかのレコードを挿入しました。次のステップは、基本的なCRUD操作(作成、取得、更新、削除)を作成することですが、この場合は、取得から始める必要があります。

取得とは、基本的にデータベースからデータを読み取ったり取得したりすることを意味するため、アプリケーションで使用できます。DBからデータを読み取ると、データはカーソルに保存されます。したがって、次のことを行う必要があります。

  1. データベースヘルパーにメソッドを作成して、データベースからデータを読み取ります
  2. メインアクティビティから、手順1で作成したメソッドを呼び出します。結果はカーソルに保存されます。
  3. mainメソッドで、カーソルからデータを抽出して使用できるようにします。(メインアクティビティですでにこれを試みたようです)。

これは、データベースの設定とデータベースのCRUD操作を作成する方法に関する優れたチュートリアルへのリンクです。今のところ、下にスクロールして、取得操作を読み上げてください。 http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

私があなたなら、チュートリアル全体を読みます。今投資する価値のある他の役立つヒントや提案がたくさんあります。たとえば、DatabaseHelperクラスにテーブル名、データベース名、列名の定数を作成することは非常に良い考えです。すべての列名とテーブル名を手動で入力し続けると、遅かれ早かれタイプミスが発生するからです。変数を使用すると、実行時に例外ではなくコンパイルエラーが発生します。

于 2012-08-14T15:58:52.510 に答える