2

我想将图像存储到 Blackberry 中的 SQLite 数据库中。那我该怎么办?我想从服务器获取图像,然后想存储在数据库中。我完美地从服务器获取图像并将图像作为字节 [] 存储在数据库中。但我无法获取它。所以请帮助我...

将代码编辑到问题中,以便阅读:

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();
}
4

1 回答 1

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
于 2012-07-29T20:10:30.143 回答