You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Andrew Cobley <a....@dundee.ac.uk> on 2014/03/19 12:55:15 UTC
Issue retrieving blobs with CQL
Cassandra 2.0.4
I’m using blobs to save and retrieve images in cassanda. However the blob I get back is not the blob I saved !
I’m saving to CQL like this:
byte[] b= {(byte)10,(byte)20,(byte)30};
int length=b.length;
ByteBuffer buffer =ByteBuffer.wrap(b);
Session session = cluster.connect("keyspace2");
PreparedStatement ps = session.prepare("insert into tweets ( image, user, interaction_time,imagelength) values(?,?,?,?)");
BoundStatement boundStatement = new BoundStatement(ps);
session.execute( boundStatement.bind( buffer, "majed", convertor.getTimeUUID(),length));
and retrieving like this:
Session session = cluster.connect("keyspace2");
PreparedStatement ps = session.prepare("select image,user,imagelength from tweets where user =?");
BoundStatement boundStatement = new BoundStatement(ps);
ResultSet rs =session.execute(boundStatement.bind( "majed"));
ByteBuffer bImage=null;
for (Row row : rs) {
bImage = row.getBytes("image") ;
System.out.println ("Image ");
for (int i=0; i< 40;i++){
System.out.print(String.format("%x ",bImage.get(i)));
if ((i+1)%16 ==0) System.out.println();
}
System.out.println();
}
session.close();
So, I should be saving byte array of 3 long, and the buffer in the save section is correct. However when I run the retrieve section I’m getting back the following:
82 0 0 8 0 0 0 28 0 0 0 2 0 0 0 5
0 0 0 3 0 0 0 1 0 0 0 3 a 14 1e
You can see the saved bytes are the last three and there is extra padding at the front.
Worse if I change the Select statement to:
PreparedStatement ps = session.prepare("select user,image,imagelength from tweets where user =?”);
I get back:
82 0 0 8 0 0 0 28 0 0 0 2 0 0 0 5
0 0 0 3 0 0 0 1 0 0 0 5 6d 61 6a 65
64 0 0 0 3 a 14 1e
If you look you can see the username “majed” in the returned blob (6d 61 6a 65 64).
any ideas whats going on here ?
Many thanks
Andy
The University of Dundee is a registered Scottish Charity, No: SC015096
Re: Issue retrieving blobs with CQL
Posted by Andrew Cobley <a....@dundee.ac.uk>.
Apologies,
this seems to be addressed in the thread :
https://groups.google.com/a/lists.datastax.com/forum/#!searchin/java-driver-user/blob$20ByteBuffer/java-driver-user/4_KegVX0teo/2OOZ8YOwtBcJ
Andy
On 19 Mar 2014, at 11:55, Andrew Cobley <a....@dundee.ac.uk>> wrote:
Cassandra 2.0.4
I’m using blobs to save and retrieve images in cassanda. However the blob I get back is not the blob I saved !
I’m saving to CQL like this:
byte[] b= {(byte)10,(byte)20,(byte)30};
int length=b.length;
ByteBuffer buffer =ByteBuffer.wrap(b);
Session session = cluster.connect("keyspace2");
PreparedStatement ps = session.prepare("insert into tweets ( image, user, interaction_time,imagelength) values(?,?,?,?)");
BoundStatement boundStatement = new BoundStatement(ps);
session.execute( boundStatement.bind( buffer, "majed", convertor.getTimeUUID(),length));
and retrieving like this:
Session session = cluster.connect("keyspace2");
PreparedStatement ps = session.prepare("select image,user,imagelength from tweets where user =?");
BoundStatement boundStatement = new BoundStatement(ps);
ResultSet rs =session.execute(boundStatement.bind( "majed"));
ByteBuffer bImage=null;
for (Row row : rs) {
bImage = row.getBytes("image") ;
System.out.println ("Image ");
for (int i=0; i< 40;i++){
System.out.print(String.format("%x ",bImage.get(i)));
if ((i+1)%16 ==0) System.out.println();
}
System.out.println();
}
session.close();
So, I should be saving byte array of 3 long, and the buffer in the save section is correct. However when I run the retrieve section I’m getting back the following:
82 0 0 8 0 0 0 28 0 0 0 2 0 0 0 5
0 0 0 3 0 0 0 1 0 0 0 3 a 14 1e
You can see the saved bytes are the last three and there is extra padding at the front.
Worse if I change the Select statement to:
PreparedStatement ps = session.prepare("select user,image,imagelength from tweets where user =?”);
I get back:
82 0 0 8 0 0 0 28 0 0 0 2 0 0 0 5
0 0 0 3 0 0 0 1 0 0 0 5 6d 61 6a 65
64 0 0 0 3 a 14 1e
If you look you can see the username “majed” in the returned blob (6d 61 6a 65 64).
any ideas whats going on here ?
Many thanks
Andy
The University of Dundee is a registered Scottish Charity, No: SC015096
The University of Dundee is a registered Scottish Charity, No: SC015096