2012-07-07 3 views
1

lorsque je crée une famille de colonnes en utilisant le cql, cela me donne une sortie très inattendue.créer une famille de colonnes dans cql?

public static void createColumnfamily() 
    { 
     try 
     { 
      Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver"); 
      Connection con = DriverManager.getConnection("jdbc:cassandra://192.168.1.32:9160/temp"); 
      String qry = "CREATE TABLE users(user_name varchar," + 
              "password varchar," + 
              "gender varchar," + 
              "session_token varchar," + 
              "birth_year bigint," + 
              "PRIMARY KEY (user_name)" + 
              ")"; 
      Statement smt = con.createStatement(); 
      smt.executeUpdate(qry); 
      System.out.println("TABLE(column family) is created"); 
      con.close(); 
     } 
     catch(Exception e) 
     { 
      System.out.println(" : " + e.getMessage()); 
     } 

    } 

Voici ce que je suis arrivé: ligne 1: 132 entrée étrangère ')' attendre EOF

Répondre

3

Vous utilisez CQL 2, qui ne prend pas en charge ce style de déclaration de clé primaire. Si vous voulez déclarer cette façon, vous devriez utiliser CQL 3, que vous pouvez accomplir en demandant cette version dans l'URL de connexion:

DriverManager.getConnection("jdbc:cassandra://192.168.1.32:9160/temp?version=3.0.0"); 

Cependant, CQL 3 n'est pas nécessaire juste pour cela. Comme l'a suggéré Steve Van Opstal, vous pouvez simplement mettre le marqueur PRIMARY KEY avec la définition de colonne elle-même, car vous n'avez pas de clé primaire à plusieurs composants.

CREATE TABLE users(
    user_name varchar PRIMARY KEY, 
    password varchar, 
    gender varchar, 
    session_token varchar, 
    birth_year bigint, 
); 

CQL 3 doit être généralement préféré si votre Cassandra soutient, comme il est la voie à suivre, mais au cas où vous ne voulez pas changer maintenant, vous pouvez faire ce deuxième changement.

+0

merci cela m'a beaucoup aidé à la fois conceptuellement et pratiquement .. –

+0

heureux de l'entendre! cela aide si vous "acceptez" la réponse. –

1

Je ne vois que deux problèmes possibles ici.

  1. La requête n'accepte pas votre façon de définir la clé primaire

    Essayez ceci:

    String qry = "CREATE TABLE users(user_name varchar PRIMARY KEY," + 
                "password varchar," + 
                "gender varchar," + 
                "session_token varchar," + 
                "birth_year bigint" 
                ")"; 
    
  2. La requête n'accepte pas la clé primaire de varchar comme

    Essayez ce:

    String qry = "CREATE TABLE users(user_id int" + 
                "user_name varchar," + 
                "password varchar," + 
                "gender varchar," + 
                "session_token varchar," + 
                "birth_year bigint," + 
                "PRIMARY KEY (user_id)" + 
                ")"; 
    
Questions connexes