2012-03-24 6 views
3

次のクエリを使用してSQLiteで検索を行っています。MATCHのSQLiteクエリエラー

public MatrixCursor listViewCursor(String query) { 
    open(); 
    Cursor dcursor = null; 
    MatrixCursor cursor = new MatrixCursor(listviewColumns); 
    Object[] listviewarray = null; 
    String[] selectionArgs = new String[] { query }; 
    System.out.println("Selectionarg = "+selectionArgs.toString()); 
    if (query == null) { 
     try {// this works 
      dcursor = database.query(LA_DATABASE_TABLE, listviewColumns, 
        null, null, null, null, LA_TEST_NAME); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } else 
     try {// this don't work!!! 
      dcursor = database.query(LA_DATABASE_TABLE, listviewColumns, 
        LA_TEST_NAME + " MATCH ?", new String[] { query }, null, null, null); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    System.out.println("dcursor count = "+dcursor.getCount()); 
    listviewarray = new Object[dcursor.getColumnCount()]; 
    if (dcursor.moveToFirst()) { 
     do { 

      for (int i = 0; i < dcursor.getColumnCount(); i++) { 
       listviewarray[i] = dcursor.getString(i); 
      } 
      cursor.addRow(listviewarray); 
      System.out.println(dcursor.getString(1)); 
     } while (dcursor.moveToNext()); 
    } else 
     return null; 
    close(); 
    return cursor; 

} 

ただし、次のエラーが発生しています。

1-01 04:36:27.376: I/SqliteDatabaseCpp(3171): sqlite returned: error code = 1, msg = statement aborts at 7: [SELECT _id, suggest_text_1, test_value_1, test_value_2, test_type_1 FROM la_table WHERE suggest_text_1 MATCH ?] unable to use function MATCH in the requested context, db=/data/data/com.assistant.lab.royale/databases/la_db 
01-01 04:36:27.376: E/SQLiteQuery(3171): exception: SQL logic error or missing database; query: SELECT _id, suggest_text_1, test_value_1, test_value_2, test_type_1 FROM la_table WHERE suggest_text_1 MATCH ? 
01-01 04:36:27.376: D/AndroidRuntime(3171): Shutting down VM 
01-01 04:36:27.376: W/dalvikvm(3171): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
01-01 04:36:27.465: E/AndroidRuntime(3171): FATAL EXCEPTION: main 
01-01 04:36:27.465: E/AndroidRuntime(3171): android.database.sqlite.SQLiteException: SQL logic error or missing database 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.database.sqlite.SQLiteQuery.nativeFillWindow(Native Method) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:86) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at com.assistant.lab.royale.DataSource.listViewCursor(DataSource.java:52) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at com.assistant.lab.royale.LabAssistant.filterListView(LabAssistant.java:32) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at com.assistant.lab.royale.LabAssistant.onQueryTextChange(LabAssistant.java:54) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.widget.SearchView.onTextChanged(SearchView.java:1091) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.widget.SearchView.access$2000(SearchView.java:90) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.widget.SearchView$11.onTextChanged(SearchView.java:1548) 
01-01 04:36:27.465: E/AndroidRuntime(3171):  at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 

なぜこれが起こって

EDITです:

は私がdcursor = database.query(LA_DATABASE_TABLE, listviewColumns , LA_TEST_NAME + " LIKE '%"+query+"%'",null, null, null, null);を使用して固定されているが、私は上記のコードは動作しませんでした理由を知りたいのですが。 ?が正しく置き換えられないようです。

答えて

5

http://sqlite.org/fts3.htmlにここから

をFTS3とFTS4の概要を参照してください、まだ、あなたはこの

CREATE VIRTUAL TABLE enrondata1 USING fts3(content TEXT); 

ないこの

CREATE TABLE enrondata2(content TEXT); 
+0

変化がないような普通のような仮想テーブルを作成したことを確認してください動作しません。 –

+0

null nullではない列にnullを渡し、再度パラメータをチェックして通知してください – ddarellis

+0

'dcursor = database.query(LA_DATABASE_TABLE、listviewColumns、LA_TEST_NAME +" LIKE '% "+ query +"% ""、nullを使用して固定しました。 、null、null、null); 'しかし、私は上記のコードがうまくいかなかった理由を知りたいと思います。 '?'が正しく置き換えられないようです。唯一の理由でこの回答を受け入れました。 –