0

内部 Sqlite データベースを持つプロジェクトに取り組んでいます。シェルとアンドロイドを介して1列( column1 )を持つ新しいテーブル( Table1 )を追加し、いくつかの新しい値を挿入および削除しました。コマンドラインを介して2つの新しい列column2column3を追加し、シェルを介してこれを呼び出しようとしました:

**PRAGMA table_info(Table1);**

次の出力が得られるため、2 つの新しい列の作成が正しいことがわかります。

*0|column1|varchar(20)|1||1
1|column2|varchar(255)|1||0
2|column3|varchar(255)|1||0*

罰金。への呼びかけ

**cursor.getColumnIndex("column1"));** 

引き続き問題ありませんが、次のように別のパラメーターを渡します。

**cursor.getColumnIndex("column2"));**

この列が作成されていないなど、-1を返しています。同じDBですが、シェルとアンドロイドの違いです。何が間違っているかを理解するためのヒントはありますか?

4

2 に答える 2

1

何が間違っているかを理解するためのヒントはありますか?

問題はデータベースとカーソルに関連している可能性があります。

しかし、db(異なるバージョン番号)をアップグレードしたい場合の私の推奨事項として、いくつかの変更(列、関係の追加/削除/変更)を実行することを意味します。次onUpgrade()のような目的で直接指定されたメソッドを使用する必要がありますあなたのもの、または古典的なALTER TABLE句を使用する可能性もあります。

PRAGMAシェル経由での使用はお勧めしません。

ノート:

「保証」については、アプリケーションの単純なクエリで実行してみてください。

String query = "pragma table_info(Table1)";
c = db.rawQuery(query, null);
if (c.moveToFirst()) {
   do {
      String name = c.getString(c.getColumnIndex("name"));
      String type = c.getString(c.getColumnIndex("type"));
      Log.i("Information", name + " " + type);
   } while (c.moveToNext());
}

これにより、どこに問題があるかを見つけることができます。1列しか表示されない場合、問題はdbです。そうでない場合、問題はカーソルです。

于 2013-03-28T15:43:24.853 に答える
0

それは今動作します。columnsを返すこのメソッドに渡されるパラメーターを編集するのを忘れていましたCursor

 db.query();

他の回答は、この問題を解決するのに役立ちました。

于 2013-03-28T15:57:21.583 に答える