Взаимодействие Кассандра с JDBC получает странный гекс - PullRequest
1 голос
/ 24 февраля 2012

Я вставляю данные с помощью hector и возвращаю их с помощью JDBC.

Данные не имеют смысла, кроме индексированного столбца, я понимаю, что это потому, что Кассандра хранит данные в виде байтов, а затем преобразует их при чтении(клиент конвертирует его)

Кто-нибудь знает, как это сделать в JDBC для Кассандры?.

Мой код:

public static void main(String[] args) throws SQLException
    {
        Connection con = null;
        String _KS = "StringMsg";
        String _CFDef = "Tweets";

        try 
        {
            Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
            con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/" + _KS);

            String query = "SELECT username, email, msg, id FROM " + _CFDef + " WHERE 'username'='LTodorov'";

            Statement stmt = con.createStatement();
            ResultSet result = stmt.executeQuery(query);

            System.out.println("hi");
            int i=0;
            while (result.next())
            {
                System.out.println(result.getString("id"));
                System.out.println(result.getString("username"));
                System.out.println(result.getString("msg"));
                System.out.println(result.getString("email"));
                System.out.print("count:" + i + "\n\n");i++;
            }
        } 
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        finally 
        {
            if (con != null) 
            {
                try 
                {
                    con.close();
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
                con = null;
            }
        }
    }

Результаты:

hi
java.nio.HeapByteBuffer[pos=237 lim=258 cap=798]
LTodorov
java.nio.HeapByteBuffer[pos=184 lim=209 cap=798]
java.nio.HeapByteBuffer[pos=144 lim=155 cap=798]
count:0

Cli Результат:

GET Tweets Where username=LTodorov;
-------------------
RowKey: LTodorov1330045080096
=> (column=email, value=6c5f6c74404162762e6267, timestamp=1330045080214000)
=> (column=id, value=4c546f646f726f7631333330303435303830303936, timestamp=13300
45080098000)
=> (column=msg, value=54686973206973206d616b696e67206d652073616466616365, timest
amp=1330045080210000)
=> (column=username, value=LTodorov, timestamp=1330045080217000)

Cli Результат с "предположить, что Tweets validator as utf8";

RowKey: LTodorov1330045080096
=> (column=email, value=l_ld@Abv.bg, timestamp=1330045080214000)
=> (column=id, value=LTodorov1330045080096, timestamp=1330045080098000)
=> (column=msg, value=This is making me sadface, timestamp=1330045080210000)
=> (column=username, value=LTodorov, timestamp=1330045080217000)

Определение семейства столбцов:

CREATE COLUMN FAMILY Tweets
WITH comparator = UTF8Type
AND key_validation_class=UTF8Type
AND column_metadata = [
{column_name: id, validation_class: UTF8Type}
{column_name: email, validation_class: UTF8Type}
{column_name: msg, validation_class: UTF8Type}
{column_name: user, validation_class: UTF8Type}

Любая Кассандрагуру есть какие-то указатели?Я получаю данные обратно, но должны ли они быть преобразованы в Java, или API JDBC выполняет свою работу, или это вещь Кассандры?(я думаю, что это не может быть решено Кассандрой)

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Я думаю, вы должны быть в состоянии сделать это в своем классе Java. Результирующий набор возвращает несколько типов данных, изучите метод getBytes () . Вы можете восстановить значение байта до String . Например

String string_username = new String(result.getBytes("username"), "UTF-8");
System.out.println(string_username);
0 голосов
/ 28 февраля 2012

Для меня это похоже на ошибку в драйвере JDBC. Если столбец имеет тип UTF8Type в CLI (то есть тип text / varchar в CQL), то вы должны просто использовать ResultSet.getString.

Вы можете сообщить об ошибках JDBC на http://code.google.com/a/apache-extras.org/p/cassandra-jdbc/issues/list

...