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/

相关文章:

java - 如何将 Java 中的字节存储到 PostgreSQL 中的 bytea 中?

android - 如何在android中解析zxing条码库中的内容

java - 如何在java或jsp中对查询结果应用where条件

mysql - 如何从mysql中检索依赖于另一列的一列的总量

Azure Geomentry 类型引发异常无法加载文件或程序集 microsoft.sqlserver.types,版本=11.0.0.0

java - 安全:090759 in weblogic managed logs

android - ActivityManager getRunningTasks 不适用于 Lollipop?

javascript - Android webview脚本标签不加载源网页

Android BroadcastReceiver 收不到任何广播事件

php - 从 Android 应用程序向 PHP 发送帖子