1

アイテムをデータベースに追加しようとしていますが、追加するために書いた以上に追加された理由と、CursorDb.getCount()の数が常に増えるため、必要なテーブルを削除しない理由を理解できません。

一般的なコード:

DBAdapter dbAdper=new DBAdapter(this);
        dbAdper.open();
        Cursor CursorDb =dbAdper.getAllTitles();

        //dbAdper.dropTable();
        dbAdper.insertTitle("rsstitle", "here need to be link");
        dbAdper.insertTitle("rsstitle2", "here need to be link2");
        dbAdper.insertTitle("rsstitle3", "here need to be link3");

        int n=CursorDb.getCount();
        do
        {
            String s= CursorDb.getString(CursorDb.getColumnIndex("RssTitle"));
            list.add(s);

        }while(CursorDb.moveToNext());
        CursorDb.close();

とdbのクラス

public class DBAdapter {

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
            "create table titles (_id integer primary key autoincrement, "
                    + "link text not null, RssTitle text not null);";

    private final Context context; 

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

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

public void dropTable() throws SQLException 
    {
        //DROP TABLE IF EXISTS mydatabase.myTable
        db.execSQL("DROP TABLE IF EXISTS "+DATABASE_NAME+"."+DATABASE_TABLE);
    }
//---insert a title into the database---
public long insertTitle(String insertLink, String title) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(link, insertLink);
    initialValues.put(RssTitle, title);

    return db.insert(DATABASE_TABLE, null, initialValues);
}

//---retrieves all the titles---
public Cursor getAllTitles() 
{
    return db.query(DATABASE_TABLE, new String[] {
            KEY_ROWID, 
            link,
            RssTitle,
    }, 
    null, 
    null, 
    null, 
    null,
    null
            );
}
4

2 に答える 2

2

テーブルをドロップすると、タイトルを挿入するテーブルがありません。その時点でエラーが発生しましたか?logcatには何がありますか?カーソルが開いていると、テーブルドロップは失敗するはずです。その時、何かエラーを観察しましたか?

解決策は、クリーンな実験を設計し、適切な場所に十分なログステートメント/ブレークポイントを挿入し、アンインストール、再構築、数回実行することです。毎回、ログを分析し(SQLExceptionなどのエラーを探します)、期待するものと実際に得られるものを比較します。それでも不明な場合は、計画と得られた結果を投稿してください。

PS。また、カーソルでmoveToFirst()を呼び出す必要があります。挿入後?

于 2012-10-07T20:51:49.840 に答える
0

エラーの場合、エラーは''でした、これを行う必要があります:

db.execSQL("DROP TABLE IF EXISTS '" + DATABASE_TABLE + "'");
于 2012-10-12T14:04:43.350 に答える