在Blackberry中,如何在数据库中存储图像?

时间:2012-07-28 05:27:29

标签: sqlite blackberry

我想将Image存储到Blackberry的SQLite数据库中..所以我必须做什么?我想从服务器获取图像,然后想要存储在数据库中..我从服务器完美地获取图像并将图像存储为数据库中的byte [] ..但我无法获取它.. 所以请帮助我...

代码已编辑到问题中,因此可以阅读:

try {
   Statement st = db.createStatement("SELECT * FROM Image");
   st.prepare(); 
   Cursor c = st.getCursor();
   Row r;
   while(c.next()) {
      r = c.getRow();
      byte[] pic=r.getBlobBytes(0);
      st.close();
      EncodedImage _bmap = EncodedImage.createEncodedImage(pic, 0, pic.length);
      BitmapField bmf=new BitmapField(_bmap.getBitmap());
      add(bmf);
   }
} catch ( Exception e ) {
   System.out.println( e.getMessage() );
   e.printStackTrace();
}

1 个答案:

答案 0 :(得分:4)

您的代码未提及blob列的名称,因此我将其称为image_data。这样的东西应该适合插入:

EncodedImage pic = getImage();
byte [] imageBytes = pic.getData();
Statement st = db.createStatement("INSERT INTO Image (image_data) values (?)");
st.prepare();
st.bind(1, imageBytes);
st.execute();

对于检索,显式命名列可能会有所帮助,因为当前代码假定blob始终是表模式中的第一列。此外,您不应该关闭循环中的语句,因为这将阻止在第一个图像之后读取任何内容:

Statement st = db.createStatement("SELECT image_data FROM Image");
st.prepare(); 
Cursor c = st.getCursor();
Row r;
while(c.next()) {
   r = c.getRow();
   byte[] pic=r.getBlobBytes(0);
   EncodedImage _bmap = EncodedImage.createEncodedImage(pic, 0, pic.length);
   BitmapField bmf=new BitmapField(_bmap.getBitmap());
   add(bmf);
}
st.close();  // moved this line out of the loop