Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Cassandra中的一组值准备语句_Cassandra_Cql_Cql3_Datastax Java Driver - Fatal编程技术网

用Cassandra中的一组值准备语句

用Cassandra中的一组值准备语句,cassandra,cql,cql3,datastax-java-driver,Cassandra,Cql,Cql3,Datastax Java Driver,我正在使用datastax Cassandra 2.0驱动程序,我正在使用准备好的和绑定的语句。假设我想询问这样的问题: SELECT * FROM foo WHERE mykey IN (UUID1, UUID2, UUID3); 其中UUID1、UUID2、UUID3是UUID值。使用绑定语句的编程方式是什么。目前,我正在尝试以下几点: preparedStatement = session.prepare("SELECT * FROM foo WHERE vref IN ?") boun

我正在使用datastax Cassandra 2.0驱动程序,我正在使用准备好的和绑定的语句。假设我想询问这样的问题:

SELECT * FROM foo WHERE mykey IN (UUID1, UUID2, UUID3);
其中UUID1、UUID2、UUID3是UUID值。使用绑定语句的编程方式是什么。目前,我正在尝试以下几点:

preparedStatement = session.prepare("SELECT * FROM foo WHERE vref IN ?")
boundStatement = new BoundStatement(preparedStatement)

val uuids: java.util.ArrayList[java.util.UUID] = //assume we're getting the values from somewhere
session.execute(boundStatement.bind(uuids))

这当前返回了错误的结果。有没有关于如何正确设置查询格式的建议?

下面是一个使用简单表格和文本值的示例。使用Centos 6.5和DSE4.5.1

我的桌子:

DESCRIBE TABLE deleteme1 ;

CREATE TABLE deleteme1 (
  col1 text,
  col2 text,
  PRIMARY KEY ((col1))
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.100000 AND
  gc_grace_seconds=10000 AND
  index_interval=128 AND
  read_repair_chance=0.000000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='99.0PERCENTILE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};
我的数据:

cqlsh:results> select * from deleteme1 ;

 col1  | col2
-------+-------
 three | three
   one |   one
   two |   two
  four |  four

(4 rows)
我的样本测试类

import java.util.ArrayList;

import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;


public class PrepStatement {
    Cluster cluster;
    Session session;

    public static void main(String args []){
        PrepStatement myTest = new PrepStatement();
        String node = "192.168.56.22";
        myTest.runTest(node);
        myTest.close();

    }

    private void runTest(String node){
        ArrayList<String> vals = new ArrayList<String>(2);
        vals.add("one");
        vals.add("three");

        try {
            cluster = Cluster.builder()
                    .addContactPoint(node)
                    //.withCredentials("cassandra", "cassandra") // only if you need a login
                    .build();
            session = cluster.connect();
            PreparedStatement preparedStatement = session.prepare("SELECT * FROM results.deleteme1 WHERE col1 IN ?");
            BoundStatement boundStatement = new BoundStatement(preparedStatement);
            ResultSet results = session.execute(boundStatement.bind(vals));
            for (Object result : results){
                System.out.println(result.toString());
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * cleans up the session
     */
    private void close() {  
        session.close();
        cluster.close();
    }
}

注意:您只能对CQL3.0文档中概述的主键列使用IN查询:

我刚刚查看了一些相关来源,您的方法似乎是正确的。你得到了什么样的错误结果?如果返回的行不正确,则可能是错误。如果您收到一个异常,则需要查看它,可能需要调整一些语法细节。请记住在中使用
。您不希望在生产集群中使用它:
Row[one, one]
Row[three, three]