1

異なる列を持つテーブル「アイテム」がありますが、各列に名前を割り当てませんでした。今、このテーブルに異なる行があり、実行したいと思います:

ItemsDao.queryBuilder().where().eq(Items.NAME, "computer").query();

しかし、私のコラムには名前がありません。「alter table」でテーブルを更新しようとしましたが、うまくいきません。

AnyBody は、情報を失うことなく列の名前を追加する方法を知っていますか?

ありがとうございました

4

2 に答える 2

2

編集:

申し訳ありませんが、質問がわかりました。あなたはあなたがあなたのフィールドのそれぞれにを指定しなかったと言っています、そしてあなたはこれのために今columnName = "..."問題を抱えています。QueryBuilder

columnName推奨されていますが、仕事に取り掛かる必要はありませんQueryBuildercolumnNameフィールドに戻って、既存のスキーマに一致するスタティックを追加できるはずです。たとえば、データベースのフィールドがである場合は、Javaフィールドにを"items"追加するだけです。columnName = "items"Sqliteは列名に関して大文字と小文字を区別するとは思いませんが、大文字と小文字を一致させることもできます。

ただし、は必要ありませんcolumnName。データベースのフィールド名がである場合、次の"items"ことができるはずです。

itemsDao.queryBuilder().where().eq("items", "computer").query();

質問を編集してスキーマと取得している例外を表示すると、QueryBuilderより具体的に回答できるようになります。


私はあなたができるはずだと信じています:

 dao.executeRaw("ALTER TABLE `items` ADD COLUMN name VARCHAR;");

それはあなたのために働きませんか?ORMLiteのドキュメントには、Androidでのスキーマの更新に関するセクションがあります。

http://ormlite.com/docs/upgrade-schema

そこから引用するには、スキーマを変更するときにデータベースのバージョンを変更してから、onUpgrade(...)メソッドで次のようにする必要があります。

Dao<Account, Integer> dao = getHelper().getAccountDao();
// change the table to add a new column named "age" 
dao.executeRaw("ALTER TABLE `account` ADD COLUMN age INTEGER;");

ほとんどの場合、データベースのバージョン番号をキーオフするのは、バージョン1の場合はXとYを実行しますが、バージョン2の場合はYを実行するだけです。

if (oldVersion == 1) {
  // we added the age column in version 2
  dao.executeRaw("ALTER TABLE `account` ADD COLUMN age INTEGER;");
}
if (oldVersion < 2) {
  // we added the weight column in version 3
  dao.executeRaw("ALTER TABLE `account` ADD COLUMN weight INTEGER;");
}

で何ができるかについては、Sqliteによって制限され います。現在、列の名前を変更するか、新しい列を追加することしかできません。詳細については、ドキュメントを参照してください。ALTER TABLE

于 2012-08-22T19:55:14.233 に答える
2

データベースを変更したい場合は、SQLiteOpenHelper で次のことを行う必要があります。

  • データベースのバージョンを変更する
  • 「onUpgrade」をオーバーライドして、必要な変更を加えます
  • onCreate メソッドを変更します。これにより、新しいユーザーは古いバージョンではなく、適切なバージョンのデータベースを使用できます

大きな構造上の変更がある場合、onUpgrade で有用な情報を新しいデータベースにコピーし、古いデータベースを削除します。

それが役に立てば幸い:)

于 2012-08-22T11:00:07.630 に答える