java - 如何在Sqlite数据库中搜索值?

标签 java android android-sqlite

我正在开发一个用于联系人的应用程序,为此我使用 sqlite 数据库来存储姓名和号码,因此我想过滤姓名和号码以搜索哪些 我尝试过这个查询但是 这对我不起作用 对于我使用的问题有什么解决方案吗?

public boolean onQueryTextChange(String newText) {

  try {
       final String temp = newText.toLowerCase();


      final ArrayList<Map> map1 = new ArrayList();


      try {
          dbhelper =new FeedReaderDbHelper(getActivity());

          SQLiteDatabase db=dbhelper.getReadableDatabase();



          String projection[]={FeedReaderContract.FeedEntry.COLUMNS_TITLE,FeedReaderContract.FeedEntry.COLUMN_SUB_TITLE};
          Cursor cursor =db.query(FeedReaderContract.FeedEntry.TABLE_NAME,projection ,FeedReaderContract.FeedEntry.COLUMNS_TITLE+"= ?",new String[]{newText},null,null,null);

          while(cursor.moveToFirst()){


            String  name = cursor.getString(cursor.getColumnIndex(FeedReaderContract.FeedEntry.COLUMNS_TITLE));
              String number = cursor.getString(cursor.getColumnIndex(FeedReaderContract.FeedEntry.COLUMN_SUB_TITLE));



              Map<String, Object> map = new HashMap();
              map.put(name, number);
              if (name.toLowerCase().contains(temp)) {
                  map1.add(map);
                  Phone.this.adapter.Filter(map1);

              }





          }    }
      catch(Exception e){
              System.out.print(Retriving_list);

          }












  }catch(Exception e){


      Toast.makeText(getActivity(), First_Retrive_Data, Toast.LENGTH_SHORT).show();



  }

//DbHelper类

公共(public)类 FeedReaderDbHelper 扩展 SQLiteOpenHelper{

public static final int DB_VERSION =1;

public static String getDataBASE_NAME() {
    return DataBASE_NAME;
}

public static void setDataBASE_NAME(String dataBASE_NAME) {
    DataBASE_NAME = dataBASE_NAME;
}

public static  String DataBASE_NAME;


Context context;





private static final String SQL_CREATE_ENTRIES =
        "CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + "(" +
                FeedReaderContract.FeedEntry._ID + "INTEGER PRIMARY KEY," +
                FeedReaderContract.FeedEntry.COLUMNS_TITLE + " TEXT ," +
                FeedReaderContract.FeedEntry.COLUMN_SUB_TITLE + " TEXT UNIQUE)";

private static final String SQL_DELETE_ENTRIES =
        "DROP TABLE IF EXISTS " + FeedReaderContract.FeedEntry.TABLE_NAME;






public FeedReaderDbHelper(Context context) {
    super(context, FeedReaderDbHelper.getDataBASE_NAME(), null, DB_VERSION);
    this.context=context;






}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

    sqLiteDatabase.execSQL(SQL_CREATE_ENTRIES);


}

void  addContactValues(FeedReaderDbHelper  dbhelper ,String name ,String number){
    SQLiteDatabase db=                   dbhelper.getWritableDatabase();

  ContentValues  values =new ContentValues();


    values.put(FeedReaderContract.FeedEntry.COLUMNS_TITLE ,name);
    values.put(FeedReaderContract.FeedEntry.COLUMN_SUB_TITLE,number);



 long rows=   db.insertWithOnConflict(FeedReaderContract.FeedEntry.TABLE_NAME,null,values,SQLiteDatabase.CONFLICT_IGNORE);

    if (rows==-1){


     //   Toast.makeText(context, String.valueOf(rows)+"not interested", Toast.LENGTH_SHORT).show();

    }

   else{

       Toast.makeText(context, String.valueOf(rows)+"inserted", Toast.LENGTH_SHORT).show();


   }







}



@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    sqLiteDatabase.execSQL(SQL_DELETE_ENTRIES);

    onCreate(sqLiteDatabase);


}

}

最佳答案

目前尚不清楚您想要什么,但如果您只想获取具有给定值的行,它应该如下所示:

String mSearchString = "what do you want to search";
String selection = setupSelectionString();
cursor = database.query(NoteContract.NoteEntry.NOTES_TABLE_NAME, projection, selection, selectionArgs,
                        null, null, sortOrder);
    private String setupSelectionString() {
        String selection = null;
        if (mSearchString != null) {
            selection = FeedReaderContract.FeedEntry.COLUMNS_TITLE + " LIKE '%"
                    + mSearchString + "%'"
                    + " OR " + FeedReaderContract.FeedEntry.COLUMN_SUB_TITLE + " LIKE '%"
                    + mSearchString + "%'";
        }
        return selection;

它适用于我的应用

关于java - 如何在Sqlite数据库中搜索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121638/

相关文章:

java - 在 Java 中查找总磁盘大小的可移植方法(Java 6 之前)

android - 从 s3 下载视频,适用于 Android 和桌面版,但不适用于 iOS

android - 如何在JAVA中的每个类中包含方法,就像php中的include函数一样?

Android SQLite 数据库对比

android - Sqlite 数据库搜索中的空格导致问题

java - Android 上的 Flutter path_provider 错误,而在 iOS 上运行完美

java - 错误 : Could not find or load main class application. 主要

android - 在 google maps android 上实现落针动画

android - Android中使用sqlite事务时的多线程问题

java - 通过 AndroidfromJNI 另一个包加载静态 void C 函数