如何通过在Android中从查询,匹配字符串从查询中检索INT ID



我尝试了所有事情:直到使用数据库查询获取ID但错误。

数据库名称:测验

表名称:字典

数据库列:_id,word,含义

问题:如何获取行的_id-column值,其中单词列匹配Abiotic或字符串m传递到函数dbBackend.getQuizByWord(m);

   public int getQuizByword(String m)
    {
        int originalPosition;
        Log.d("MYINT", "Here: "+m);
        String query="select * from dictionary where word ='"+m+"'";
        Cursor cursor=this.getDbConnection().rawQuery(query, null);
        if(cursor.moveToFirst()){
            do {
                   originalPosition = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
            }while(cursor.moveToNext());
        }
        cursor.close();
return originalPosition;
}

从我传递此M字符串的地方:

String m;
    filterText=(EditText)findViewById(R.id.editText1);
    filterText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            m=s.toString();
            MainActivity.this.listAdapter.getFilter().filter(s);
        }
        @Override
        public void afterTextChanged(Editable s) {
        }

和项目侦听器

itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // make Toast when click
            Toast.makeText(getApplicationContext(), "Position "+position, Toast.LENGTH_LONG).show();
            //long data=parent.getSelectedItemId
            //Log.d("MYINT", "First------------- "+data);
            //int a=dbBackend.getQuizByword(m);
            DbBackend dbBackend1 = new DbBackend(MainActivity.this);
            Log.d("MYINT", "Here: "+dbBackend1.getQuizByword(m));
            int a=position;
            Log.d("MYINT", "First------------- "+a);
            Toast.makeText(getApplicationContext(), "New Position "+a, Toast.LENGTH_LONG).show();
            Intent i = new Intent(MainActivity.this, MeaningActivity.class);
            //i.putExtra("DICTIONARY_ID", position);
            i.putExtra("DICTIONARY_ID", a);
            startActivity(i);
        }

源代码文件

1(SQL注入不好。修复您的查询。

2(您可能不需要循环。

3(尝试捕获抛出的异常

public long getQuizByword(String m)
    String query="select * from dictionary where word =?";
    Cursor cursor=this.getDbConnection().rawQuery(query, new String[] { m });
    long id = -1;
    try {
        if(cursor.moveToFirst()){
            id = cursor.getLong(cursor.getColumnIndexOrThrow("_id"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (cursor!=null) cursor.close();
   } 
    return id;
} 

如果返回-1,则找不到或没有错误

我不确定 getDbConnection()返回了什么,但是您应该将此方法移至sqliteopenhelper,然后用 getReadableDatabase()

替换

编辑

关于使用ArrayAdapter和过滤器进行的操作,您可能宁愿使用CursorAdapter,并加载带有过滤数据的其他Cursor进入ListView。不要与指示和阵列列表来回跳动。