如何使用文本视图值查询数据库行等于文本视图值?

Posted

技术标签:

【中文标题】如何使用文本视图值查询数据库行等于文本视图值?【英文标题】:How to use text view value to query database row equal to the text view value? 【发布时间】:2012-02-06 19:31:31 【问题描述】:

我很高兴这个网站在这里。每次都对我有帮助。

所以我的新问题是,我已将一个值从一个活动传递到另一个活动,并将该值设置为文本视图。该值始终为数字。然后我使用“在选择的菜单项上”将该值传递给另一个活动并将该值设置为文本视图。我要做的是使用该值(它是数字并表示与数据关联的行 ID)来查询数据库并返回与前面提到的数值关联的行。然后填充相同活动的适当编辑文本或文本视图。

这里是我调用文本值的地方 (tv1)

private void populateFields() 

if (tv1!=null) 
    Cursor note = mDbHelper.fetchRow(tv1);
    startManagingCursor(note);

    //rowid.setText(note.getString(
        //  note.getColumnIndexOrThrow(DatabaseManager.KEY_ROWID)));
    txtbox28.setText(note.getString(
           note.getColumnIndexOrThrow(DatabaseManager.KEY_NAME)));
    txtbox1.setText(note.getString(
            note.getColumnIndexOrThrow(DatabaseManager.NICBASEML)));
    txtbox4.setText(note.getString(
            note.getColumnIndexOrThrow(DatabaseManager.NICDROPS)));
    txtbox8.setText(note.getString(
            note.getColumnIndexOrThrow(DatabaseManager.NICPERCT)));

和查询

public Cursor fetchRow(TextView tv1) throws SQLException 

            Cursor mCursor =

                mDb.query(true,DATABASE_TABLE, new String[] KEY_ROWID, KEY_NAME,
                        NICBASEML, NICDROPS, NICPERCT, PGML, PGDROPS,PGPERCT,
                        VGML,VGDROPS,VGPERCT, WAPML, WAPDROPS, WAPPERCT, 
                        FLV1NAME, FLV1ML, FLV1DROPS, FLV1PERCT,
                        FLV2NAME, FLV2ML, FLV2DROPS, FLV2PERCT,
                        FLV3NAME, FLV3ML, FLV3DROPS, FLV3PERCT,
                        FLV4NAME, FLV4ML, FLV4DROPS, FLV4PERCT,
                        DROPSML, AMOUNT, FINALNIC, BPG, BVG, BASENIC, KEY_ROWID + "=" + tv1,  null, null, null, null, null);

            if (mCursor != null) 
                mCursor.moveToFirst();
            
            return mCursor;

        

这是我现在得到的错误。

02-07 12:14:16.120:E/androidRuntime(2713):由:android.database.sqlite.SQLiteException:靠近“@405dcd48”:语法错误:,编译时:SELECT DISTINCT _id、name、nicbaseml ,nicdrops,nicperct,pgml,pgdrops,pgperct,vgml,vgdrops,vgperct,wapml,wapdrops,wapperct,flv1name,flv1ml,flv1drops,flv1perct,flv2name,flv2ml,flv2drops,flv2perct,flv3name,flv3ml,flv3drops,flv3perct,flv4name,flv ,flv4drops,flv4perct,dropml,数量,finalnic,bpg,bpg,basenic FROM recipes WHERE _id=android.widget.TextView@405dcd48

嗯,卡在这个上。 @405dcd48 的错误在哪里?

【问题讨论】:

【参考方案1】:

这里是解决方案。花了好几个小时(2 天)才弄清楚这一点,然后就惨了!手到脸的瞬间。但无论如何,这里是其他有相同问题的解决方案。在填充字段的声明中(在本例中为 fetch(row)。

这样做:

private void populateFields() 

String row = tv1.getText().toString();//String to get the textview of the rowid

        if (tv1!= null)  //Checking to see if the field is not empty to proceed

            Cursor note = mDbHelper.fetchRow(row);//Calling my cursor to manage data
            startManagingCursor(note);//Starting the management and retrieve data

您将收到上述错误,然后是空指针异常。这可以通过声明你的字段来解决 -->(txtbox1= (TextView) findViewById(R.id.textView22);.

您的数据库管理器需要针对字符串进行配置。

像这样:

public Cursor fetchRow(String row) throws SQLException 

现在您可以使用等于您要查找的数据的行 ID 的 textview 或 editview 值从行中检索数据。

【讨论】:

以上是关于如何使用文本视图值查询数据库行等于文本视图值?的主要内容,如果未能解决你的问题,请参考以下文章

怎么设置access查询中空值为0?

如何仅显示具有值的文本视图?

如何在文本视图中显示具有更新值的数据?

在另外两个文本视图获取值之后设置文本视图值[重复]

如何在 WHERE 子句中使用混合文本和日期字段?

如何从另一个视图swiftui中传递字段文本值