第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQLiteConstraintException:NOT NULL 約束android

SQLiteConstraintException:NOT NULL 約束android

蕪湖不蕪 2022-04-28 17:11:18
我有一個編輯器活動,我在數(shù)據(jù)庫中插入我的數(shù)據(jù)。我創(chuàng)建了 3 列:-標(biāo)識健康任務(wù) TEXT NOT NULL和天文本。我使用來自編輯文本的數(shù)據(jù)將數(shù)據(jù)插入到任務(wù)列中,并通過創(chuàng)建包含編輯文本的警報對話框?qū)⑵渌麛?shù)據(jù)插入到天數(shù)列中。我成功地將數(shù)據(jù)插入任務(wù)列,但是當(dāng)我將警報對話框中的數(shù)據(jù)插入天數(shù)列時,我收到此錯誤:-“android.database.sqlite.SQLiteConstraintException:NOT NULL 約束失敗:Task.TaskName(代碼 1299)”。請幫我解決這個問題。我知道有相同的問題可用,但 android studio 在調(diào)試 sq lite 數(shù)據(jù)庫方面沒有多大幫助,而且錯誤對所有人都不同,請記住,請不要將此問題標(biāo)記為復(fù)制。這是我的 SQLITE 創(chuàng)建語法  public void onCreate(SQLiteDatabase db) {        String query= "CREATE TABLE " + ChallengesEntry.DB_TABLE  + " ("                +ChallengesEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "                +ChallengesEntry.DB_COLUMN + " TEXT , "                +ChallengesEntry.DB_COLUMN_DAYS + " TEXT);";        db.execSQL(query);    }這是我的編輯活動課程  @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.action_save:                insertTask();                // Exit activity                finish();                return true;            case android.R.id.home:                // Navigate back to parent activity (CatalogActivity)                NavUtils.navigateUpFromSameTask(this);                return true;        }        return super.onOptionsItemSelected(item);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.button1:                final EditText editText =  new EditText(this);                AlertDialog dialog = new AlertDialog.Builder(this)                        .setTitle("Add new Challenge")                        .setMessage("Whats your Challenge")                        .setView(editText)                        .setPositiveButton("Add", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                String task = String.valueOf(editText.getText());                                insertDay(task);                            }    }
查看完整描述

1 回答

?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊

您的CREATE TABLE聲明不包括NOT NULL該列TaskName,盡管您說它被定義為NOT NULL.

所以這是第一個不一致。

您必須更改此行:


+ChallengesEntry.DB_COLUMN + " TEXT , "


+ChallengesEntry.DB_COLUMN + " TEXT NOT NULL, "

然后從模擬器/設(shè)備卸載應(yīng)用程序,以便刪除數(shù)據(jù)庫

,然后重新運行應(yīng)用程序,以便重新創(chuàng)建數(shù)據(jù)庫和表。

但是有一種情況是已經(jīng)NOT NULL為列創(chuàng)建了表,TaskName并且您可能對代碼進(jìn)行了不反映表的真實狀態(tài)的更改。

如果是這種情況,那么您得到的錯誤是有原因的:

您有 2 種不同的方法:

insertTask()并將insertDay()數(shù)據(jù)插入到您的表中!為什么?

這意味著表的每一行都有一個 ID,只有 1 列包含數(shù)據(jù),

另一列為空 ( null)。

這是你想要的嗎?我不這么認(rèn)為。

因此,如果列TaskName已定義NOT NULL并且您執(zhí)行insertDay(),

那么您會收到錯誤,因為TaskName在該行中沒有值(它為空)

并且這是不允許的。

因此,從EditText和 中獲取數(shù)據(jù)并AlertDialog

使用 1 個插入語句將其保存到表中,如下所示:


public boolean insertData(String taskName, String days){

    DbHelper mDbHelper = new DbHelper(this);

    SQLiteDatabase db = mDbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(ChallengesEntry.DB_COLUMN,taskName);

    values.put(ChallengesEntry.DB_COLUMN_DAYS,days);

    boolean result = db.insert(ChallengesEntry.DB_TABLE, null, values) >= 0;

    db.close();

    return result;

}

如果插入成功,此方法返回true或。false你可以這樣稱呼它:


boolean successful = insertData(taskName, days);

其中taskname和days是您從EditText和收集的值A(chǔ)lertDialog。

編輯

在您的活動類中聲明此變量:


long taskId = 0; 

此方法將插入任務(wù)名稱:


private long insertTask(){

    String name = editChallengeName.getText().toString().trim();

    if (name.isEmpty())

        return -1;

    DbHelper mDbHelper = new DbHelper(this);

    SQLiteDatabase db = mDbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(ChallengesEntry.DB_COLUMN, name);

    long id = db.insert(ChallengesEntry.DB_TABLE, null, values);

    db.close();

    return id;

}

你把它叫做你有的地方insertTask();:


taskid = insertTask();

然后此方法將更新 id = taskid 的行:


private void insertDay(String task) {

    DbHelper mDbHelper = new DbHelper(this);

    SQLiteDatabase db = mDbHelper.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(ChallengesEntry.DB_COLUMN_DAYS, task );

    db.update(ChallengesEntry.DB_TABLE, values, ChallengesEntry.DB_COLUMN + "=" + taskid, null);

    db.close();

}

你調(diào)用它就像你調(diào)用前一個一樣insertDay()


查看完整回答
反對 回復(fù) 2022-04-28
  • 1 回答
  • 0 關(guān)注
  • 321 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號