Android에서 fts 테이블을 쿼리하는 방법

필론 대성당

나는 안드로이드를 위해 개발 중입니다. http://sqlite.org/fts3.html 참조를 사용하고 있습니다. fts 테이블을 다음과 같이 만듭니다.

final String SQL_CREATE_TABLE_SEARCHABLE =
    
        new StringBuilder("CREATE VIRTUAL TABLE ")
    
                .append(SearchableEntry.TABLE_NAME)
    
                .append(" USING fts4(")

                    .append(SearchableEntry.COLUMN_DOG_ID).append(", ")

                    .append(SearchableEntry.COLUMN_BREED).append(", ")
    
                .append(SearchableEntry.COLUMN_CATEGORY).append(",")

                     .append(SearchableEntry.COLUMN_DOG_NAME).append(",")

                    .append(SearchableEntry.COLUMN_DOCUMENTATION)
    
                .append(");").toString();

    sqLiteDatabase.execSQL(SQL_CREATE_TABLE_SEARCHABLE);

COLUMN_DOG_ID는 실제로 텍스트입니다. 숫자가 아니라 문자열입니다. 어쨌든 나는 테이블을 만든 다음 데이터를 추가합니다. 아무 문제가없는 것 같습니다. 그러나 쿼리를 시도 할 때 항상 막 다른 골목에 도달했습니다. 예외가 발생합니다. 다음은 쿼리입니다.

private Cursor getSearchableByTokens(Uri uri, String[] projection) {

        DogLog.d(TAG,"getSearchableByTokens with uri %s",uri);

        String table = DogContractt.SearchableEntry.TABLE_NAME;

        String selection = table + " MATCH ? ";

        String queryText = DogContractt.SearchableEntry.getQueryTextFromUri(uri);

        String[] selectionArgs = {queryText};

        if (null == mOpenHelper) {
    
        mOpenHelper = new DogsDBHelper(getContext());

        }

        SQLiteDatabase readableDB = mOpenHelper.getReadableDatabase();

        Cursor cursor = readableDB.query(table, projection, selection, selectionArgs, null, null, null);

        if (null != cursor) {
            cursor.setNotificationUri(getContext().getContentResolver(), DogContractt.SearchableEntry.CONTENT_URI);

        }
    
    return cursor;
    
}

오류

FATAL EXCEPTION: main
Process: com.company.android, PID: 18696
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.android/com.company.android.activities.SearchableActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3122)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3221)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6840)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
 Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78)
at android.support.v4.widget.CursorAdapter.init(CursorAdapter.java:174)
at android.support.v4.widget.CursorAdapter.<init>(CursorAdapter.java:138)
at com.company.android.activities.SearchableActivity$2.<init>(SearchableActivity.java:0)
at com.company.android.activities.SearchableActivity.searchableResultsList(SearchableActivity.java:81)
at com.company.android.activities.SearchableActivity.searchContentProvider(SearchableActivity.java:73)
at com.company.android.activities.SearchableActivity.onCreate(SearchableActivity.java:59)
at android.app.Activity.performCreate(Activity.java:6535)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3075)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3221) 
at android.app.ActivityThread.access$1000(ActivityThread.java:198) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:6840) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
CL.

커서 어댑터에는이라는 고유 한 숫자 열이 필요합니다 _id. 이는 FTS 테이블이든 일반 테이블이든 모든 쿼리 결과에 적용됩니다.

FTS 테이블에는 내부 docid열이 있습니다 . 프로젝션에 추가하기 만하면됩니다.

String[] projection = new String[] { "docid AS _id", ... };

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Rails 콘솔에서 테이블을 쿼리하는 방법

분류에서Dev

쿼리에서 테이블을 조인하는 방법

분류에서Dev

FTS 테이블에 INSERT 또는 REPLACE

분류에서Dev

하위 하위 쿼리에서 테이블을 참조하는 방법

분류에서Dev

VBA에서 SQL 쿼리에 테이블 이름을 전달하는 방법

분류에서Dev

VBA에서 SQL 쿼리에 테이블 이름을 전달하는 방법

분류에서Dev

mysql : 하나의 테이블에서 비율을 쿼리하는 방법

분류에서Dev

dbf 쿼리에서 mdb에 테이블을 만드는 방법

분류에서Dev

Rails 쿼리-특정 열에서 두 테이블을 조인하는 방법

분류에서Dev

laravel에서 쿼리 다른 테이블을 조인하는 방법

분류에서Dev

테이블에서 증가 된 열 값을 쿼리하는 방법

분류에서Dev

INSERT 쿼리에서 사용할 테이블 열을 인쇄하는 방법

분류에서Dev

Codeiginter에서 검색 쿼리를 위해 테이블을 조인하는 방법

분류에서Dev

BiqQuery 테이블에서 여러 반복 열을 쿼리하는 방법

분류에서Dev

다른 테이블에서 쿼리를 호출하는 방법

분류에서Dev

android에서 많은 테이블을 포함하는 default.relam의 특정 테이블에서 쿼리를 만드는 방법

분류에서Dev

HABTM 조인 테이블의 Rails 쿼리에 LIKE 절을 포함하는 방법

분류에서Dev

sqlite android에서 테이블을 업데이트하는 방법

분류에서Dev

Android에서 테이블에 배열을 표시하는 방법

분류에서Dev

django 쿼리를 사용하여 테이블에서 일치하는 이름을 검색하는 방법

분류에서Dev

Laravel의 뷰 / 블레이드 파일에서 테이블을 쿼리하는 방법

분류에서Dev

SQLite는 하나의 쿼리에서 두 테이블에서 sum ()을 선택하는 방법

분류에서Dev

구매 데이터 테이블에서 SQL을 사용하여 일일 실적을 쿼리하는 방법

분류에서Dev

Beeline 쿼리 결과에서 열 이름에서 테이블 이름을 제거하는 방법

분류에서Dev

Android SQLite에서 테이블 행을 반환하는 방법

분류에서Dev

컨트롤러에서 쿼리를 사용하여 뷰에서 테이블을 생성하는 방법

분류에서Dev

.NET Core 3에서 LINQ 구문을 사용하여 여러 테이블을 쿼리하는 방법

분류에서Dev

동적 쿼리 : SQL-Server에서 테이블 이름 또는 기타 문자열을 정의하는 방법

분류에서Dev

JDBC를 사용하여 SELECT 쿼리에서 동적 테이블 이름을 사용하는 방법

Related 관련 기사

  1. 1

    Rails 콘솔에서 테이블을 쿼리하는 방법

  2. 2

    쿼리에서 테이블을 조인하는 방법

  3. 3

    FTS 테이블에 INSERT 또는 REPLACE

  4. 4

    하위 하위 쿼리에서 테이블을 참조하는 방법

  5. 5

    VBA에서 SQL 쿼리에 테이블 이름을 전달하는 방법

  6. 6

    VBA에서 SQL 쿼리에 테이블 이름을 전달하는 방법

  7. 7

    mysql : 하나의 테이블에서 비율을 쿼리하는 방법

  8. 8

    dbf 쿼리에서 mdb에 테이블을 만드는 방법

  9. 9

    Rails 쿼리-특정 열에서 두 테이블을 조인하는 방법

  10. 10

    laravel에서 쿼리 다른 테이블을 조인하는 방법

  11. 11

    테이블에서 증가 된 열 값을 쿼리하는 방법

  12. 12

    INSERT 쿼리에서 사용할 테이블 열을 인쇄하는 방법

  13. 13

    Codeiginter에서 검색 쿼리를 위해 테이블을 조인하는 방법

  14. 14

    BiqQuery 테이블에서 여러 반복 열을 쿼리하는 방법

  15. 15

    다른 테이블에서 쿼리를 호출하는 방법

  16. 16

    android에서 많은 테이블을 포함하는 default.relam의 특정 테이블에서 쿼리를 만드는 방법

  17. 17

    HABTM 조인 테이블의 Rails 쿼리에 LIKE 절을 포함하는 방법

  18. 18

    sqlite android에서 테이블을 업데이트하는 방법

  19. 19

    Android에서 테이블에 배열을 표시하는 방법

  20. 20

    django 쿼리를 사용하여 테이블에서 일치하는 이름을 검색하는 방법

  21. 21

    Laravel의 뷰 / 블레이드 파일에서 테이블을 쿼리하는 방법

  22. 22

    SQLite는 하나의 쿼리에서 두 테이블에서 sum ()을 선택하는 방법

  23. 23

    구매 데이터 테이블에서 SQL을 사용하여 일일 실적을 쿼리하는 방법

  24. 24

    Beeline 쿼리 결과에서 열 이름에서 테이블 이름을 제거하는 방법

  25. 25

    Android SQLite에서 테이블 행을 반환하는 방법

  26. 26

    컨트롤러에서 쿼리를 사용하여 뷰에서 테이블을 생성하는 방법

  27. 27

    .NET Core 3에서 LINQ 구문을 사용하여 여러 테이블을 쿼리하는 방법

  28. 28

    동적 쿼리 : SQL-Server에서 테이블 이름 또는 기타 문자열을 정의하는 방법

  29. 29

    JDBC를 사용하여 SELECT 쿼리에서 동적 테이블 이름을 사용하는 방법

뜨겁다태그

보관