0

这是我的错误编码我创建了一个名为“详细信息”的表以下是该表的数据库代码,插入方法为“insertDescription”

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 不完整(我坚持查询的中间)skydrive

4

2 回答 2

0

LIKE不支持字符类。您收到一个错误,因为您的电话号码的第一个字符 is not [,或者第二个 is not 0,或者第三个 is not -,等等。

替换LIKEGLOB

于 2013-07-30T19:54:41.130 回答
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);");
于 2013-07-30T17:36:17.430 回答