微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android.database.sqlite.SQLiteException:near“…”:语法错误(代码1)

当我打开我的RSS应用程序时,我想检查我的数据库中是否存在一篇文章.如果它存在,我想删除它(或忽略它),如果不在数据库中写入它.

我一直试图这样做:

            Cursor cursor = ourDatabase.rawQuery("select 1 from "
                    + DBHelper.DATABASE_TABLE + " where " + DBHelper.TITLE + "='"
                    + title + "'" + " AND " + DBHelper.DATE + "='" + date + "'",
                    new String[] {});
            if (cursor.moveToFirst()) {
                boolean exists = (cursor.getCount() > 0);
                cursor.close();
                return exists;
            } else {
    return false;       }

        }

但我得到这个错误:

06-06 16:01:11.341: E/AndroidRuntime(13867): Caused by: android.database.sqlite.SQLiteException: near "όσο": syntax error (code 1): , while compiling: select 1 from all_t where title='Ο ΦΟΒΟΣ και ο ΤΡΟΜΟΣ των διαδηλωτών!!! Αυτές οι γυναίκες είναι πιο σκληρές απ' όσο δείχνουν!' AND date='Wed, 05 Jun 2013 18:12:15'

解决方法:

这是一个典型的问题,没有使用selectionArgs,这正是人们应该使用它们的原因:你用简单的引号引用你的字符串,但你的字符串包含单引号,所以SQLite在实际结束之前检测字符串的结尾,并尝试将其余部分解析为SQLite关键字.

正确的解决方案是通过使用那些selectionArgs而不是试图逃避自我而将转义留给SQLite.在你的情况下,那将是:

Cursor cursor = ourDatabase.rawQuery("select 1 from "
            + DBHelper.DATABASE_TABLE + " where " + DBHelper.TITLE + "=?"
            + " AND " + DBHelper.DATE + "=?",
            new String[] {title, date});

此外,它更干净,因为您可以从查询中获取常量而不是每次构建它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐