You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Robert Wille <rw...@footnote.com> on 2013/05/02 15:57:05 UTC

Exception inserting UUID's into Cassandra using JDBC driver

Just downloaded the latest Cassandra and JDBC driver. When I try to insert
UUID's into a column family, I get an exception.

Here's how I created the column family:

CREATE TABLE browse.tree (tree_id UUID PRIMARY KEY, activation_time
TIMESTAMP, tree_lock_id INT, sql_publication_id INT);

Here's some code that produces the problem:

UUID uuid = java.util.UUID.randomUUID();
PreparedStatement statement = c.prepareStatement("insert into tree (tree_id)
values (?)");
statement.setObject(1, uuid);
statement.execute();

And here's the exception I get:

java.sql.SQLNonTransientException: encountered object of class: class
java.util.UUID, but only 'String' is supported to map to the various VARCHAR
types
        at 
org.apache.cassandra.cql.jdbc.HandleObjects.makeBadMapping(HandleObjects.jav
a:124)
        at 
org.apache.cassandra.cql.jdbc.HandleObjects.makeBytes(HandleObjects.java:391
)
        at 
org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.setObject(Cassandra
PreparedStatement.java:351)
        at 
org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.setObject(Cassandra
PreparedStatement.java:338)
        at CassandraTest.main(CassandraTest.java:26)

I've tried using the string representation, but then it complains saying
that it needs to be exactly 16 bytes. I've tried inserting as a byte array
of length 16, but I get the same exception as above.

Any help would be appreciated. Thanks.

Robert



Re: Exception inserting UUID's into Cassandra using JDBC driver

Posted by aaron morton <aa...@thelastpickle.com>.
There is an open ticket for this https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/issues/detail?id=72

Cheers

-----------------
Aaron Morton
Freelance Cassandra Consultant
New Zealand

@aaronmorton
http://www.thelastpickle.com

On 3/05/2013, at 1:57 AM, Robert Wille <rw...@footnote.com> wrote:

> Just downloaded the latest Cassandra and JDBC driver. When I try to insert UUID's into a column family, I get an exception.
> 
> Here's how I created the column family:
> 
> CREATE TABLE browse.tree (tree_id UUID PRIMARY KEY, activation_time TIMESTAMP, tree_lock_id INT, sql_publication_id INT);
> 
> Here's some code that produces the problem:
> 
> UUID uuid = java.util.UUID.randomUUID();
> PreparedStatement statement = c.prepareStatement("insert into tree (tree_id) values (?)");
> statement.setObject(1, uuid);
> statement.execute();
> 
> And here's the exception I get:
> 
> java.sql.SQLNonTransientException: encountered object of class: class java.util.UUID, but only 'String' is supported to map to the various VARCHAR types
>         at org.apache.cassandra.cql.jdbc.HandleObjects.makeBadMapping(HandleObjects.java:124)
>         at org.apache.cassandra.cql.jdbc.HandleObjects.makeBytes(HandleObjects.java:391)
>         at org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.setObject(CassandraPreparedStatement.java:351)
>         at org.apache.cassandra.cql.jdbc.CassandraPreparedStatement.setObject(CassandraPreparedStatement.java:338)
>         at CassandraTest.main(CassandraTest.java:26)
> 
> I've tried using the string representation, but then it complains saying that it needs to be exactly 16 bytes. I've tried inserting as a byte array of length 16, but I get the same exception as above.
> 
> Any help would be appreciated. Thanks.
> 
> Robert