android - 字符串包含引号时出现 SQL 异常(无法识别的标记)

标签 android mysql sqlexception

当我使用我的函数从“mysql.db”检索数据时,出现 SQL 异常(无法识别的标记)。当 String address 中包含引号时会发生异常。

我已经尝试过改变这一行

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

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

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

我试过用

DatabaseUtils.sqlEscapeString(address);

没有效果。

我尝试在这个问题中使用escape 函数:How do I escape special characters in 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;
}

最佳答案

那些 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 + "'" 替换为 "=?" 并将数据填充到 ? 中按照必须在 String[]

中填写的顺序

? 将自动替换为转义字符串数据。

关于android - 字符串包含引号时出现 SQL 异常(无法识别的标记),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051647/

相关文章:

php - 如何在HTML属性中使用PHP值

mysql - 如何在mysql中获取最后一个子关系

java - 捕获重复条目异常

android - 对于正在播放的 Intent 过滤器,正确的 Spotify 操作是什么?

android - 更改 float 操作按钮的形状

mysql - 使用 erlang mysql 模块,如何关闭数据库连接?

c# - 发生异常 .. 关键字 'Table' 附近的语法不正确

java - Android:使用 Twitter API 1.1 oAuth

android - Gradle 不会按要求排除模块

java - SQL 异常,未请求生成的键