2017-09-13 39 views
0

这可能是我的SQLite“选择器”定义愚蠢的错误,但似乎无法从类似的问题并发布至今的错误。我可能犯了一个愚蠢的错误,但不能在我的生活中找到它。请让我知道,如果你需要更多的信息能够帮助!SQLite光标查询错误“喜欢”和“==”不工作在内容提供者“选择”定义

所以这个工作得很好:

selection = "((" + 
       TransContract.TransEntry.COLUMN_DATE + " > " + 
       Long.toString(dateOutput) + ") AND (" + 
       TransContract.TransEntry.COLUMN_DATE + " <= " + Long.toString(dateOutputEnd) + "))"; 

但是,当我尝试查询COLUMN_CATEGORY(这是文本格式),以这样的方式

selection = TransContract.TransEntry.COLUMN_CATEGORY + " like " + '%'+ 
       "Transport General" + "%"; 

或者这样说:

selection = TransContract.TransEntry.COLUMN_CATEGORY + " == " + 
       "Transport General"; 

我收到“E/AndroidRuntime:致命例外”

我的游标查询:

cursor = database.query(
        TransContract.TransEntry.TABLE_NAME, 
        projection, 
        selection, 
        selectionArgs, 
        null, 
        null, 
        sortOrder); 

我DbHelper(其中类别栏找到):

String SQL_CREATE_ENTRIES = 
      "CREATE TABLE " + TransContract.TransEntry.TABLE_NAME + " (" + 
        TransContract.TransEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        TransContract.TransEntry.COLUMN_AMOUNT + " REAL, " + 
        TransContract.TransEntry.COLUMN_TYPE + " INTEGER NOT NULL DEFAULT 0, " + // debit, credit 
        TransContract.TransEntry.COLUMN_ACCOUNT + " INTEGER, " + // wallet, savings, more later. 
        TransContract.TransEntry.COLUMN_ACCOUNT_FROM + " INTEGER, " + // defaults from wallet 0 
        TransContract.TransEntry.COLUMN_ACCOUNT_TO + " INTEGER, " + // defaults back to wallet 0 
        TransContract.TransEntry.COLUMN_CATEGORY + " TEXT, " + 
        TransContract.TransEntry.COLUMN_TITLE + " TEXT, " + 
        TransContract.TransEntry.COLUMN_DATE + " INTEGER, " + 
        TransContract.TransEntry.COLUMN_RECURRING + " INTEGER NOT NULL DEFAULT 0," + 
        TransContract.TransEntry.COLUMN_FREQUENCY + " TEXT," + 
        TransContract.TransEntry.COLUMN_END_DATE + " INTEGER" + 
        ");"; 

编辑

谢谢您的意见,我本来应该更具体的!我的堆栈跟踪确实是一个语法错误,它来自我正在粘贴的新代码行。

Caused by: android.database.sqlite.SQLiteException: near "General": syntax error (code 1): , while compiling: SELECT _id, category, title, amount, type, date FROM transactions WHERE category == Transport General ORDER BY date DESC 

的问题是对于字符串(感谢@Ton Plooij),但奇怪的比较值并不需要单引号双引号内的单引号。

这里是工作的解决方案:

selection = TransContract.TransEntry.COLUMN_CATEGORY + " = " + 
       "'Transport General'"; 

回答

0

我不知道你是怎么编程语言的作品,但都发生故障的SQlite的查询字符串似乎错误地创建。类似的查询应该看起来像“TransContract.TransEntry.COLUMN_CATEGORY like'%Transport General%'”。您构建的比较字符串不包含中的开始和结束单引号查询。第二个查询有两个问题:'=='应该是单个'=',并且再次比较值不包含在单引号中。