1

重複した質問についてすぐにフラグを立てないでください。正しくフォーマットされた SQL クエリがあるため、私の問題は異なります。

public static final String TABLE_NAME = "log";
public static final String COLUMN_ID = "_id";
public static final String LOG_TEXT = "logtext";
private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + " (" +
        COLUMN_ID + " integer primary key autoincrement, " +
        LOG_TEXT + " TEXT not null);";

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_CREATE);

}

ここでクエリを実行します

String[] columns = {LOG_TEXT,COLUMN_ID};
    Cursor cursor = helper.getReadableDatabase().query(TABLE_NAME, columns, null, null, null, null, COLUMN_ID + " desc");

これは、SQLクエリを含む生成された例外をキャッチします。

catch(Exception e){
Log.D("sql Exception",e.getMessage());}

そしてそれは戻ってきます

no such column: _id: , while compiling: SELECT logtext, _id FROM log ORDER BY _id desc

私は、Oracle SQL とリレーショナル データベース全般に精通しています。それは私のORDER BY句ですか?order by はいつでも使用できると確信していました。GROUP BY と同じ動作はし​​ません。

なぜ例外なのかについてのアイデアはありますか? 誰かが私が ArrayAdaptor ステートメントで更新しているのを見たい場合に備えて。リストビューでカーソルを使用しています

String[] data = query();


    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, data);
    listView.setAdapter(adapter);}
4

3 に答える 3

5

リライト

でスキーマを変更するたびにTABLE_CREATE、これらの変更をアプリに通知する必要がありますが、変更しても自動的には変更されませんTABLE_CREATE。これを行う最も簡単な方法はdatabase_version、拡張された SQLiteOpenHelper クラスをインクリメントすることです。同じ結果を得るために、アプリをアンインストール/再インストールすることもできます。SQL に精通している場合は、テーブルを ALTER できます。ただし、新しい列にアクセスする前に、アプリがスキーマの変更を行うことを確認する必要がある方法が何であれ...

SQLite の場合:

_id integer primary key

同義です:

_id integer primary key autoincrement not null

また、クエリはデフォルトの順序として降順を使用するため、ORDER BY _idと同じORDER BY _id DESCです。

于 2012-07-16T17:02:06.323 に答える
2

同じ問題がありました。つまり、機能するはずだったのに機能しませんでした(作成コマンドにいくつかのタイプミスがあり、修正しましたが、それでも役に立ちませんでした)。その後、同僚がデータをクリアしてみて(AppInfoで「データをクリア」)、問題を解決するように言いました。どうやら古いデータベース(機能しなかった)がまだそこにあり、最初にクリアする必要がありました。

私のような他の誰か(アンドロイドの初心者)がこの問題に出くわした場合に備えて、この回答をここに置いておきます.

于 2014-12-26T21:27:03.120 に答える
1

_id後で、つまりコードがすでに1回実行された後で、列の定義をcreateステートメントに追加しましたか?データベースは永続化されたファイルであるため、コード内のテーブル構造を変更する場合は、アプリケーションのデータをクリアして、データベースファイルを正しいテーブル/列データで再作成できるようにする必要があります。

于 2012-07-16T17:10:51.220 に答える