2

当我使用我的函数从“mysql.db”检索数据时,我收到了 SQL 异常(无法识别的令牌)。当字符串地址内部有引号时会发生异常。

我已经尝试更改此行

KEY_ADDRESS + "='" + address + "'",

KEY_ADDRESS + "=\"" + address + "\"",

它解决了我对包含单引号 (') 和 (`) 的字符串的问题,但对包含双引号 (") 的字符串产生了另一个问题。

我尝试使用

DatabaseUtils.sqlEscapeString(address);

没有效果。

我试图从这个问题中使用转义函数:如何在 MySQL 中转义特殊字符?,但它没有用。

这是我的代码:

public Cursor getNameFromAddress(String address) throws SQLException
{
    Cursor mCursor =
            db.query(DATABASE_TABLE_PRINC, new String[] {
                    KEY_ROWID,
                    KEY_NAME,
                    KEY_ADDRESS
                    },
                    KEY_ADDRESS + "='" + address + "'",
                    null,
                    null,
                    null,
                    null,
                    null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
4

3 回答 3

5

那些selectionArgs/whereArgs旨在用于:

Cursor mCursor =
        db.query(DATABASE_TABLE_PRINC, new String[] {
                KEY_ROWID,
                KEY_NAME,
                KEY_ADDRESS
                },
                KEY_ADDRESS + "=?",
                new String[] { address },
                null,
                null,
                null,
                null);

将所有替换"='" + stuff + "'"为并按照必须填写的顺序"=?"放入数据以填充s?String[]

?然后将自动被转义的字符串数据替换。

于 2012-10-24T15:02:51.487 回答
2

失踪 ”?” 象征

Cursor mCursor =
        db.query(DATABASE_TABLE_PRINC, new String[] {
                KEY_ROWID,
                KEY_NAME,
                KEY_ADDRESS
                },
                KEY_ADDRESS + "=?" ,
                new String[]{address},
                null,
                null,
                null,
                null);
于 2012-10-24T15:01:49.890 回答
2
queryText = "select * from yourtable where address = ?";
mDb.rawQuery(queryText, new String[] {addressValue}); 

这样您就可以解决问题并保护您的系统免受 SQL 注入的影响。

于 2012-10-24T15:04:27.873 回答