2012-01-22 70 views
1

我正在使用一個簡單的數據庫。它有三列。 _id(整數主鍵自動增量),jobnumber(文本唯一不爲空)和jobpart(文本不爲空)。android SQLite不尊重「不爲空」約束

我正在使用一個帶有兩個EditText小部件的對話框來獲取輸入,並在按鈕按下時將它添加到數據庫中。

當我輸入一個jobnumber但保留jobpart爲空時,我認爲該記錄不會被添加。但是,它正在被添加,我得到一個空白的工作部分。我正在使用「插入」。看,我想也許我需要使用「insertWithOnConflict」來代替,但這似乎沒有什麼差別,同樣的事情發生了。

我的下一個想法也許是一個空字符串沒有算作一個空值,所以我嘗試了以下內容:

if (jobpart == "") { 
    jobpart1 = null; 
}else{ 
    jobpart1 = jobpart; 
} 

同樣的事情發生,數據庫甚至沒有打嗝,把一個空的插槽中。

所以我開始瀏覽SQL文檔。我想知道是否需要將數據庫設置爲嚴格模式,因爲可能正在使用隱式默認值?雖然我發現在與服務器相關的部分中,所以我不確定它甚至適用於此,如果它確實如此,我將如何以及何時執行此操作。 (在數據庫創建?在數據庫打開?)。

任何指針讚賞。

+0

你可以發佈你正在使用做插入的代碼? – tomtheguvnor

回答

3

輸入的東西當你比較字符串需要用戶equals()方法,而不是==String是一個對象,以便==剛比較指針。

即你想:

if (jobpart.equals("")) { 
+0

Doh。我很早以前就知道這一點。做出你推薦的改變,現在一切都按照它應有的方式工作總結並將其與我的基本問題/問題聯繫起來......一個空字符串是**不等於空,所以期望SQL命令由於空行而失敗是行不通的。謝謝您的幫助! – Barak

2

試試這個

if (jobpart.matches("")) { 
jobpart1 = null; 
}else{ 
jobpart1 = jobpart; 
} 

,或者你可以確保他們在edittexts

+0

我可能會最終確定他們在我完成之前輸入了一些東西,但是現在它只是裸露的骨頭,所以我將從簡單地將空字符串更改爲空開始。謝謝您的幫助! – Barak