2013-07-30 36 views
0

這裏是我創建了一個名爲「詳細信息」下面的表格我的車編碼爲表的插入方法「insertDescription」的Android SQLite的約束錯誤

public void insertDescription(int rid, String name, String phoneno, String email, String subject, String desc){ 
    ContentValues cv = new ContentValues(); 
    cv.put("_rid", rid); 
    cv.put("name", name); 
    cv.put("phoneno", phoneno); 
    cv.put("email", email); 
    cv.put("subject", subject); 
    cv.put("desc", desc); 
    Log.d("DB", "Record is here!"); 
    sdb.insert("details", null, cv); 
} 
@Override 
public void onCreate(SQLiteDatabase arg0) { 
arg0.execSQL("CREATE TABLE users (_uid INTEGER PRIMARY KEY, name TEXT, mail TEXT, password TEXT, hint TEXT);"); 
arg0.execSQL("CREATE TABLE details (_rid INTEGER PRIMARY KEY, name TEXT, " + 
      "phoneno VARCHAR(10) CONSTRAINT phone CHECK(phoneno LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')," + 
" email TEXT, subject TEXT, desc TEXT);"); 
} 

數據庫代碼使用上面,我通過以下java代碼將值插入到數據庫中

String rnos = rno.getText().toString(); 
int rnoz = Integer.parseInt(rnos); 
String names = name.getText().toString(); 
String mobiles = mobile.getText().toString(); 
String emailids = emailid.getText().toString(); 
String subjects = subject.getText().toString(); 
String descs = desc.getText().toString(); 
String dates = date.getText().toString(); 
if(rnos.isEmpty() || names.isEmpty() || mobiles.isEmpty() 
    || emailids.isEmpty() || subjects.isEmpty()|| descs.isEmpty() || dates.isEmpty()){ 
    Toast.makeText(getApplicationContext(), "All Fields are Mandatory", Toast.LENGTH_LONG).show(); 
    }else{ 
     mdb.openDB(); 
     mdb.insertDescription(rnoz, names, mobiles, emailids, subjects, descs); 
     Toast.makeText(getApplicationContext(), "Record Saved Successfully!", Toast.LENGTH_LONG).show(); 
     } 
     mdb.closeDB(); 

發生以下錯誤。我不知道如何處理SQL查詢我剛從我的朋友那裏得到了這個查詢約束查詢。無論如何,表成功創建,我看到程序執行後的表結構。以下是我的錯誤日誌

07-30 22:06:23.215: E/SQLiteDatabase(876): Error inserting desc=uuuu email=uuuu subject=uuuu phoneno=99808 name=uuuu _rid=1234 
07-30 22:06:23.215: E/SQLiteDatabase(876): android.database.sqlite.SQLiteConstraintException: constraint failed (code 19) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at in.blogspot.pcnlap.sha_college_guide.MyDataBase.insertDescription(MyDataBase.java:47) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at in.blogspot.pcnlap.sha_college_guide.DescriptionPage.onClick(DescriptionPage.java:51) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at java.lang.reflect.Method.invoke(Method.java:511) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.view.View$1.onClick(View.java:3593) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.view.View.performClick(View.java:4091) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.view.View$PerformClick.run(View.java:17072) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.os.Handler.handleCallback(Handler.java:615) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.os.Looper.loop(Looper.java:153) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at android.app.ActivityThread.main(ActivityThread.java:5086) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at java.lang.reflect.Method.invoke(Method.java:511) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
07-30 22:06:23.215: E/SQLiteDatabase(876): at dalvik.system.NativeStart.main(Native Method) 

我希望發生錯誤是由於我在查詢中給出的約束語句。在插入方法的Java'insertDescription()'我試圖將所有保存爲一個字符串。如果提供任何更好的查詢或替代方案建議我,我已經給了我的整個項目的zip無法完成(我與查詢的中間stucking)skydrive

回答

0

LIKE不支持字符類。 你得到一個錯誤,因爲你的電話號碼的第一個字符不是[,或者第二個是不0,或第三不是-

更換LIKEGLOB

+0

我閱讀文檔,但我是新手到SQL或SQLite查詢。你能告訴我如何在數據庫中只插入電話號碼(10位數字),這是我的要求。我試過幾個查詢,似乎沒有工作@CL。 –

+0

就像我說的,只需用'GLOB'替換'LIKE'即可。 –

0

你有phoneno VARCHAR(10) CONSTRAINT phone CHECK(phoneno LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')

問題在下面的代碼

arg0.execSQL("CREATE TABLE details (_rid INTEGER PRIMARY KEY, name TEXT, " + 
      "phoneno VARCHAR(10) CONSTRAINT phone CHECK(phoneno LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')," + 
" email TEXT, subject TEXT, desc TEXT);"); 
+0

我該怎麼做才能解決問題? @Taresm –

+0

@AkbarShaEbrahim抱歉,我對您的CONSTRAINT並不是很熟悉,您可以嘗試不使用CONSTRAINT,並在用戶輸入數據時對數據應用驗證,而不是在數據庫中進行驗證! –