当我使用我的函数从“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/