0

私のコードに何か問題がありますか?setStatusは常に-1を返します。エラーのコードをトレースしていますが、見つかりません。たぶんあなたたちはここでできます。とてもイライラします。

これは私がデータベースを呼んだ方法です:

SQLDatabaseLevelOne sql;

        sql = new SQLDatabaseLevelOne(MainActivity.this);
        sql.open();
        sql.setStatus("1");
        sql.close();

これは私のSQLDatabaseLevelOne.classからのものです:

public static final String KEY_ID = "_id";
    public static final String KEY_QUESTION_STATUS = "_STATUS";
    public static final String KEY_SCORE = "_SCORE";
    //public static final String KEY_INDEX = "_INDEX";

    private static final String DATABASE_NAME = "passworddb";
    private static final String DATABASE_TABLE = "passwordtable";
    private static final int DATABASE_VERSION = 1;
    //private int index_score;

    private DbHelper dbHelper;
    private final Context dbContext;
    private SQLiteDatabase sqlDatabase;

    private static class DbHelper extends SQLiteOpenHelper {

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase database) {
            /*database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
                    KEY_SCORE + " TEXT NOT NULL, " +
                    KEY_INDEX + " TEXT NOT NULL);");*/
            database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
                    KEY_SCORE + " TEXT NOT NULL);");
        }

        @Override
        public void onUpgrade(SQLiteDatabase database, int arg1, int arg2) {
            database.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
            onCreate(database);
        }
    }

        public SQLDatabaseLevelOne(Context context) {
            dbContext = context;
        }

        public long setStatus (String status) {         
            ContentValues dbContentValues = new ContentValues();
            dbContentValues.put(KEY_QUESTION_STATUS, status);
            //dbContentValues.put(KEY_SCORE, score);
            return sqlDatabase.insert(DATABASE_TABLE, null, dbContentValues);
        }

public void open() {
            dbHelper = new DbHelper(dbContext);
            sqlDatabase = dbHelper.getWritableDatabase();
            return;
        }

        public void close() {
            dbHelper.close();
        }
4

3 に答える 3

2

テーブル作成クエリを次のように変更します

  database.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                    KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
                    KEY_SCORE + " TEXT);");

作成KEY_SCORE しているのでTEXT NOT NULL、uは KEY_SCORE列の値を渡す必要があります

注:テーブル構造を変更した後、DBバージョンを変更する必要があります

于 2013-02-25T17:05:57.610 に答える
1

setStatus()、への呼び出しsqlDatabase.insert()はを返して-1います。これは、データの挿入に失敗していることを意味します。

sqlDatabase.insertOrThrow()代わりにに変更してみてください。これにより、失敗時に例外がスローされ、実際に何が問題になったかを簡単に見つけることができます。

于 2013-02-25T17:04:48.187 に答える
1

LogCatエラーを投稿していないため、他の問題も発生している可能性があります。ただし、両方 KEY_QUESTION_STATUSに値を設定する必要があります。また、テーブルの定義に含めるKEY_SCOREことはできないと指定したため、次のようになります。null

KEY_QUESTION_STATUS + " TEXT NOT NULL, " +
KEY_SCORE + " TEXT NOT NULL);");

これを試してみるとどうなりますか?

public long setStatus (String status) {         
    ContentValues dbContentValues = new ContentValues();
    dbContentValues.put(KEY_QUESTION_STATUS, status);
    dbContentValues.put(KEY_SCORE, "something");
    return sqlDatabase.insert(DATABASE_TABLE, null, dbContentValues);
}
于 2013-02-25T17:05:35.720 に答える