当我尝试从sqlite数据库中检索blob时,光标抛出了index outofbounds
异常。
我的DataBaseHelper类是:
public class DataBaseHelper extends SQLiteOpenHelper {
public static final String Database_Name="images.db";
public static final String Table_Name="imgs";
Bitmap bitmap;
public DataBaseHelper(Context context) {
super(context, Database_Name,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+Table_Name+"(id integer primary key autoincrement , image blob)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("drop table if esists "+Table_Name);
}
public boolean insert(byte[] img)
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put("image",img);
long insert=db.insert(Table_Name,null,cv);
if(insert==-1)
{
return false;
}
else
{
return true;
}
}
我的结果类:
public class Results extends AppCompatActivity {
ImageView imageView;
DataBaseHelper mDataBaseHelper;
Bitmap img;
Bitmap bitmap;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
textView=(TextView)findViewById(R.id.textView3);
mDataBaseHelper=new DataBaseHelper(this);
SQLiteDatabase db=mDataBaseHelper.getReadableDatabase();
Toast.makeText(getApplicationContext(),"Emm",Toast.LENGTH_LONG).show();
Cursor cursor=db.rawQuery("select* from "+mDataBaseHelper.Table_Name,null);
byte[] imageArray=cursor.getBlob(3);
bitmap=BitmapFactory.decodeByteArray(imageArray,0,imageArray.length);
imageView.setImageBitmap(bitmap);
}
}
上面的结果代码抛出cursor index outofbounds exception,index -1 requested with size of 1
。
答案 0 :(得分:1)
if (cursor.moveToNext()){
cursor.getBlob(cursor.getColumnIndexOrThrow(yourColumnName));
}
通过这种方式,您可以将光标移动到返回的数据集的第一行上。 无论如何,您的select语句中似乎都缺少空格。
答案 1 :(得分:0)
要从中获取行的表mDataBaseHelper.Table_Name
,
通过执行以下语句:
"select * from " + mDataBaseHelper.Table_Name
只有1列,但是您尝试通过以下方式获得第4列:
byte[] imageArray=cursor.getBlob(3);
CREATE
类中的SQLiteOpenHelper
语句显示表中有2列:id
和image
,所以您应该这样做:
if (cursor.moveToFirst()) {
byte[] imageArray=cursor.getBlob(1);
}
cursor.close();
尝试一下,但是如果再次遇到相同的错误,则意味着db中存在的表只有1列。
因此,如果问题仍然存在,请从仿真器/设备上卸载应用程序,以便数据库将被删除并再次运行以重新创建表。然后重新填充表格。