【问题标题】:How insert java list value in cassandra using java code?如何使用 java 代码在 cassandra 中插入 java 列表值?
【发布时间】:2017-01-19 13:18:18
【问题描述】:

我的 cassandra 数据库结构:

CREATE TABLE devjavasource.userorders (
user_id text PRIMARY KEY,
name text,
rlist list<text>
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';

我的代码:

import com.datastax.driver.core.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class cassandraList
{

    public static void main(String[] args) {
        Cluster cluster = null;
        Session session = null;
        cluster = cluster.builder().addContactPoint("192.168.1.23").build();
        List<String> list= new ArrayList<String>();
        list.add("fake1@fake1.com");
        list.add("fake2@fake2.com");

        session = cluster.connect("devjavasource");

        System.out.println("test :" +list);

        Statement st = new SimpleStatement("INSERT INTO USERS (user_id, name, Rlist) VALUES ('11101', 'john', "+list+");");

        System.out.println("query :" +"INSERT INTO USERS (user_id, name, Rlist) VALUES ('11101', 'john', "+routing_points+");");
        ResultSet rs = session.execute(st);
    }

我遇到了一个错误,所以从 print 语句中获取查询,如下所示:

  INSERT INTO USERS (user_id, name, Rlist) VALUES ('11101', 'john', [AUE, SAN, UK, LON]);

然后我手动运行这个查询到 cql,我得到了这个错误:

SyntaxException:

【问题讨论】:

    标签: java cassandra cqlsh


    【解决方案1】:

    使用绑定标记:

    List<String> list = new ArrayList<String>(); 
    list.add("fake1@fake1.com"); 
    list.add("fake2@fake2.com"); 
    Statement st = new SimpleStatement("INSERT INTO USERS (user_id, name, rlist) VALUES ('11101', 'john', ?);", list); 
    ResultSet rs = session.execute(st);
    

    【讨论】:

      【解决方案2】:

      由于您的列表由字符串组成,这应该可以解决问题:

      INSERT INTO USERS (user_id, name, Rlist) VALUES ('11101', 'john', ['AUE', 'SAN', 'UK', 'LON']);
      

      【讨论】:

      • 在java中如何动态创建带有单引号的字符串列表
      • 我得到了没有单引号的 java 列表,如何转换?
      • 我需要更多信息。你准备好查询了吗?如果您可以发布您尝试插入的代码,我可以看看。
      • List list= new ArrayList(); list.add("fake1@fake1.com"); list.add("fake2@fake2.com"); Statement st = new SimpleStatement("INSERT INTO USERS (user_id, name, Rlist) VALUES ('11101', 'john', "+list+");");结果集 rs = session.execute(st);
      • 尝试使用准备好的语句。他们可能会自动为您处理。
      猜你喜欢
      • 2014-09-20
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2018-09-18
      相关资源
      最近更新 更多