2

これは私のデータベースです

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                 KEY_CATEGORY + " TEXT NOT NULL, " +
                KEY_DATE + " TEXT, " +
                KEY_PRICE + " LONG, " +
                KEY_DETAILS + " TEXT NOT NULL);" 
                );

これはすべてのデータを削除する方法です

public void deleteall() {
        // TODO Auto-generated method stub
        ourDatabase.delete(DATABASE_TABLE, null, null);

    }

これは特定のデータを削除する方法です

public void deletentry(long l) {
        // TODO Auto-generated method stub
        ourDatabase.delete(DATABASE_TABLE, KEY_ROWID + " = " + l,null);

    }

ここでは、削除したデータを使用していますが、行 ID がインクリメントされたままです。データが削除されるため、1 にリセットしたいのですが、特定のデータを削除すると行 ID が値を順番に変更します。行 ID の間。

4

4 に答える 4

2

autoincrementはあなたの最良の選択肢だとは思わない。ギャップのない単純な番号付きテーブルを作成することが目標である場合は、ID を手動で追跡するための列を含むテーブルを使用してこれを処理する方がはるかに簡単な場合があります。

そのようなテーブルを作成した場合、次の操作のためにコードにヘルパー メソッドを記述することができます: addColumn、removeColumn、emptyTable。

あなたのaddColumnメソッドは、テーブルをクエリして を決定し、max(ID)次に 1 を追加して、その番号を次のエントリに使用します。

このメソッドremoveColumnは、ID でエントリを削除し、その ID を使用してその上のすべてを並べ替えることができます。または、順序が重要でない場合は、最後の行を取得し、ギャップを埋めるために ID を変更することができます。

あなたのemptyTableメソッドはすべてのエントリを削除する可能性があります。

更新 たぶん、これで始めることができます。メソッドは、プログラムで定義する必要があります。それらの中にコードを入れてから、呼び出されるように設定する必要があります。

例えば:

public void addColumn(String category, long date, String details) {
    //code here would need to determine the max of ID and add one
    //to it. the sql below would retrieve max, i dont know the sql lite code
    //off the top of my head.
    //SELECT MAX(ID) FROM DATABASE_TABLE;
    int newID = max + 1;
    //add row to the database using newID
}

public void removeColumn(int id) {
    //remove column from database
    //DELETE FROM DATABASE_TABLE WHERE ID = id;
    //change last entry to use id
    //UPDATE DATABASE_TABLE SET ID = id WHERE id = (SELECT MAX(ID) FROM DATABASE_TABLE);
}

public void emptyTable() {
    //DELETE FROM DATABASE_TABLE;
}

これらのメソッドを呼び出すには、クラス内の他の Java メソッドと同じように呼び出します。

addColumn(12, 'text', (long)100, 'text');
removeColumn(10);
emptyTable();
于 2013-03-15T19:31:37.673 に答える
2

SQLite は、最大の ROWID を特別な SQLITE_SEQUENCE テーブルに保持します。そのテーブルを次のように削除できます。

db.delete("SQLITE_SEQUENCE","NAME = ?",new String[]{TABLE_NAME});
于 2014-07-08T06:40:58.753 に答える