Android中Java无法将BLOB转为字符串的问题求助
解决SQLite Cursor获取混合类型字段的报错问题
核心方案
SQLite支持动态字段类型,同一个字段可能存储String、null或BLOB值,解决报错的关键是先判断字段实际类型,再调用对应获取方法:
修正后的代码
Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT evd.id,evd.additional_image,evd.overall_remarks FROM emv_validation_details AS evd WHERE evd.id="+id); while (cursor.moveToNext()) { myEdit.putString("emv_id_u",cursor.getString(0)); // 获取字段类型,分支处理不同情况 int fieldType = cursor.getType(1); if (fieldType == Cursor.FIELD_TYPE_NULL) { additonal_image_u = null; } else if (fieldType == Cursor.FIELD_TYPE_STRING) { // 若需将字符串转为字节数组,可自行转换,示例: // additonal_image_u = cursor.getString(1).getBytes(); additonal_image_u = null; // 按业务需求处理字符串场景 } else if (fieldType == Cursor.FIELD_TYPE_BLOB) { additonal_image_u = cursor.getBlob(1); } myEdit.putString("overall_remarks_u",cursor.getString(2)); } cursor.close();
关键说明
cursor.getType(int columnIndex)返回当前字段的实际类型,对应Cursor的常量:FIELD_TYPE_NULL、FIELD_TYPE_STRING、FIELD_TYPE_BLOB- 先判断null类型,再分别处理字符串和BLOB类型,彻底避免类型转换冲突
- 额外建议:表结构设计时尽量避免同一字段存储不同类型数据,可拆分字段或统一存储为BLOB(字符串转字节数组存入),从根源减少这类问题
内容的提问来源于stack exchange,提问作者marivic valdehueza
相关产品推荐
相关产品推荐

