-1

ContentObserver私のプロジェクトには、連絡先テーブルに変更があったときに呼び出されるのを待っているコードがあります。その場合は、テーブル内のすべての連絡先が変更されているか、作成されているかを 1 つずつ確認します。次に、これに応じて、自分の変更を自分のテーブルに保存します。しかし、それは私にエラーを与えます。これが私のコードです:

while (phones.moveToNext()) {
            try {
                name = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                phoneNumber = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                JSONObject jobject = db.select_contact(name, phoneNumber);

                String type1 = jobject.getString("type");

                if (type1.equals("upload")) {
                    Log.i("********", "Upload on the db" + name + "  "
                            + phoneNumber);
                    db.contact_table(name, phoneNumber);
                } else if (type1.equals("change_name")) {
                    db.update_name(name, phoneNumber);
                    Log.i("********", "Change name and upload " + name);
                } else if (type1.equals("change_phone")) {
                    db.update_name(name, phoneNumber);
                    Log.i("********", "Change phone and upload "
                            + phoneNumber);
                }

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

そして、私が作成した自分のテーブルにアップロードする部分があります:

public long update_name(String name, String number) {
    ContentValues cv = new ContentValues();
    cv.put(NAME, name);
    return ourDatabase.update(DATABASE_TABLE_4, cv, NUMBER + "=" + number,
            null);
}

public long update_number(String name, String number) {
    ContentValues cv = new ContentValues();
    cv.put(NUMBER, number);
    return ourDatabase
            .update(DATABASE_TABLE_4, cv, NAME + "=" + name, null);
}

問題は、DB のアップロード変更の一部で、次のエラーが発生することです。

07-07 09:28:41.412: W/System.err(11667): android.database.sqlite.SQLiteException: near "629": syntax error: , while compiling: UPDATE contacts SET name=? WHERE phone=+34 629 21 00 80
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1936)
07-07 09:28:41.412: W/System.err(11667):    at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1887)
07-07 09:28:41.412: W/System.err(11667):    at com.background.Database.update_name(Database.java:215)
07-07 09:28:41.417: W/System.err(11667):    at com.extract.Contacts.onChange(Contacts.java:69)
07-07 09:28:41.417: W/System.err(11667):    at android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:43)
07-07 09:28:41.417: W/System.err(11667):    at android.os.Handler.handleCallback(Handler.java:605)
07-07 09:28:41.417: W/System.err(11667):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-07 09:28:41.417: W/System.err(11667):    at android.os.Looper.loop(Looper.java:137)
07-07 09:28:41.417: W/System.err(11667):    at android.app.ActivityThread.main(ActivityThread.java:4507)
07-07 09:28:41.422: W/System.err(11667):    at java.lang.reflect.Method.invokeNative(Native Method)
07-07 09:28:41.422: W/System.err(11667):    at java.lang.reflect.Method.invoke(Method.java:511)
07-07 09:28:41.422: W/System.err(11667):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-07 09:28:41.422: W/System.err(11667):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-07 09:28:41.422: W/System.err(11667):    at dalvik.system.NativeStart.main(Native Method)
4

2 に答える 2

2

これ:

WHERE phone=+34 629 21 00 80 

これでなければなりません:

WHERE phone="+34 629 21 00 80"
于 2012-07-07T07:44:25.400 に答える
0

構文が間違っています。SQLで文字列値をテストするには、「Like」演算子を使用する必要があります。

Whereステートメントは次のようになります。

WHERE phone LIKE "+34 629 21 00 80"

これが正解です:

public long update_name(String name, String number) {
    ContentValues cv = new ContentValues();
    cv.put(NAME, name);
    return ourDatabase.update(DATABASE_TABLE_4, cv, NUMBER + " LIKE ?",
        new String[]{number});
}

public long update_number(String name, String number) {
    ContentValues cv = new ContentValues();
    cv.put(NUMBER, number);
    return ourDatabase
        .update(DATABASE_TABLE_4, cv, NAME + " LIKE ?", new String[]{name});
}
于 2012-07-07T11:30:47.917 に答える