首页 > 解决方案 > 如何将 SQL 结果转换为 android studio 上的字符串?

问题描述

我正在使用 RFID 阅读器从 RFID 标签获取 ID (EPC),我正在尝试实现一个代码来检查该 ID 是否存在于 SQL 数据库中(之前创建并存储在 assets 文件夹中)并返回所有 de数据库数据(如果存在)。然后,我想将该数据存储在一个字符串上。

我已经尝试了这里介绍的一些可能的解决方案,但我认为我的代码存在严重问题,因为每次我扫描 RFID 标签时应用程序都会崩溃。

这是我的数据库代码:


import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;


import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

import java.util.ArrayList;
import java.util.List;

import mobliescanner.com.grotg.hpp.mobilescanner.model.TagData;

public class Database extends SQLiteAssetHelper {

    private static final String DB_NAME="tagDataDB.db";
    private static final int DB_VER=1;

    public Database(Context context) {
        super(context, DB_NAME, null, DB_VER);
    }

//Função para pegar a tag pelo ID
    public List<TagData> getTagDataByID(String id){
        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

        String[] sqlSelect={"TAG_ID","TAG_NUMBER","TAG_QUAL","TAG_LOCAL","TAG_DESCRICAO","GALERIA_AUTOR","GALERIA_AUTOR_LOCAL"};
        String tableName="TagData";

        qb.setTables((tableName));
        Cursor cursor = qb.query(db,sqlSelect,"ID LIKE ?",new String[]{"%"+id+"%"},null,null,null);
        List<TagData> result = new ArrayList<>();
        if(cursor.moveToFirst()){
            do{
                TagData tagdata = new TagData();
                tagdata.setId(cursor.getString(cursor.getColumnIndex("TAG_ID")));
                tagdata.setIdnum(cursor.getInt(cursor.getColumnIndex("TAG_NUMBER")));
                tagdata.setTag(cursor.getString(cursor.getColumnIndex("TAG_QUAL")));
                tagdata.setLocaltag(cursor.getString(cursor.getColumnIndex("TAG_LOCAL")));
                tagdata.setDesctag(cursor.getString(cursor.getColumnIndex("TAG_DESCRICAO")));
                tagdata.setAutor(cursor.getString(cursor.getColumnIndex("GALERIA_AUTOR")));
                tagdata.setAutorlocal(cursor.getString(cursor.getColumnIndex("GALERIA_AUTOR_LOCAL")));

                result.add(tagdata);
            }while (cursor.moveToNext());
        }
        return result;
}

这是我在 MainActivity 上尝试做的事情:

Database testdb = new Database(this);
String dataresult = String.valueOf(testdb.getTagDataByID(epctag));

其中“epctag”是一个字符串,它存储从阅读器获得的标签 ID。

预期:如果数据库上存在 ID TAG,则返回所有数据库数据,而不是将结果存储到 STRING 中。

实际结果:每次扫描 RFID 标签时应用程序都会崩溃。

标签: javaandroidsql

解决方案


推荐阅读