0

行が使用可能かどうかを最初にチェックする挿入メソッドがあります。そうでない場合は、新しいものを作成しようとするか、使用可能な場合はそれを更新しますが、このメソッドはelse部分的に例外を与えます。ここに私のメソッドがあります

public long SetSettings(String whichCol, String value) {
        // TODO Auto-generated method stub
        preferences = ourcontext.getSharedPreferences(filenames, 0);
        String[] colum = new String[] { KEY_CAR };
        Cursor c = ourDB.query(DBhelper.DATABASE_SETTINGSTABLE, colum, KEY_CAR
                + "=" + "'" + preferences.getString("selectedcar", "") + "'",
                null, null, null, null);
        ContentValues cvedit = new ContentValues();
        cvedit.put(KEY_CAR, preferences.getString("selectedcar", ""));
        cvedit.put(whichCol, value);
        if (c.getCount() > 0) {

            return ourDB.update(
                    DBhelper.DATABASE_SETTINGSTABLE,
                    cvedit,
                    KEY_CAR + "=" + "'"
                            + preferences.getString("selectedcar", ""), null);

        } else {

            return ourDB.insert(DBhelper.DATABASE_SETTINGSTABLE, null, cvedit);

        }
    }

これが私のデータベースの作成方法です:

public static final String KEY_ID = "_id";
public static final String KEY_CAR = "car";   
public static final String KEY_SET_DISENTRY_MODE = "ditance_entry_mode";
        public static final String KEY_SET_DISUNIT = "distance_unit";
        public static final String KEY_SET_PETROLUNIT = "petrol_unit";
        public static final String KEY_SET_CONDISPLAY = "consumption_display";
        public static final String KEY_SET_DATEFORMAT = "date_format";
        public static final String KEY_SET_CURRENCY = "currency";
        public static final String KEY_SET_STOREFILLLOC = "store_fillloc";
        public static final String KEY_SET_GPSPIN = "gps_pin";
        public static final String KEY_SET_KEYCLICK = "keyboard_click";
        public static final String KEY_SET_KEYVIBRATE = "keyboard_vibrate";
        public static final String KEY_SET_BACKUP = "backup";

@Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

        db.execSQL("CREATE TABLE " + DATABASE_SETTINGSTABLE + " (" + KEY_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_CAR
                + " TEXT NOT NULL, " + KEY_SET_DISENTRY_MODE + " TEXT, "
                + KEY_SET_DISUNIT + " TEXT, " + KEY_SET_PETROLUNIT + " TEXT, "
                + KEY_SET_CONDISPLAY + " TEXT, " + KEY_SET_DATEFORMAT
                + " TEXT, " + KEY_SET_CURRENCY + " TEXT, "
                + KEY_SET_STOREFILLLOC + " TEXT, " + KEY_SET_GPSPIN + " TEXT, "
                + KEY_SET_KEYCLICK + " TEXT, " + KEY_SET_KEYVIBRATE + " TEXT, "
                + KEY_SET_BACKUP + " TEXT NOT NULL);");

    }

どこに問題があるのか​​ わかりません。助けはありますか?

4

1 に答える 1

2

制約KEY_SET_BACKUP TEXT NOT NULLがありますが、更新時にこの値として null を渡しているため、以下の行も contentvalues に追加します

cvedit.put(KEY_SET_BACKUP,"");
于 2012-08-12T17:07:58.847 に答える