当前位置: 首页 > 知识库问答 >
问题:

Cassandra Datastax Ruby插入错误

卞俊哲
2023-03-14

我有一个问题插入查询在红宝石与卡桑德拉,

这是我的表:

CREATE TABLE testkeyspace.ticket (
    id int,
    uid text,
    annule boolean,
    avoir decimal,
    caisse int,
    clotureid int,
    couverts decimal,
    creation_iso timestamp,
    modif_iso timestamp,
    montantencaisse decimal,
    montantttc decimal,
    nb_articles int,
    numero int,
    remise decimal,
    remise_montant decimal,
    remise_type text,
    remise_valeur decimal,
    rendu decimal,
    stats_iso timestamp,
    PRIMARY KEY (id, uid)
) 

在ruby中,我做了一个prepare语句:

insert_table_ticket = session.prepare("INSERT INTO ticket(id, uid, annule, avoir, caisse, clotureid, couverts,creation_iso, modif_iso, montantencaisse, montantttc, nb_articles, numero, remise,remise_montant, remise_type, remise_valeur, rendu,stats_iso) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")

我把这些值用于测试:

session.execute(insert_table_ticket,
                      1,
                      "test",
                      true,
                      1.1,
                      1,
                      1,
                      1.0,
                      1415350203,
                      1415350203,
                      1.1,
                      1.1,
                      1,
                      1,
                      1.1,
                      1.1,
                      "tests",
                      1.1,
                      1.1,
                      1415350203
      )

我得到了这个错误:

/home/florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/cql _ byte _ buffer . Rb:275:in < code > to _ s ':来自/home/florian/的参数数目错误(1对0) (ArgumentError)。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/cql _ byte _ buffer . Rb:275:in append _ decimal ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/type _ converter . Rb:287:in < code > decimal _ to _ bytes ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/type _ converter . Rb:85:in 调用' from /home/florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/type _ converter . Rb:85:in < code > to _ bytes ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/requests/execute _ request . Rb:93:in encode _ values ' from/home/Florian/中的块。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/requests/execute _ request . Rb:92:in < code > each ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/requests/execute _ request . Rb:92:in each _ with _ index ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/requests/execute _ request . Rb:92:in < code > encode _ values ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/protocol/requests/execute _ request . Rb:39:in initialize ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/cluster/client . Rb:190:in < code > new ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/cluster/client . Rb:190:in execute ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/session . Rb:81:in < code > execute _ async ' from/home/Florian/。rvm/gems/ruby-2 . 1 . 4/gems/Cassandra-driver-1 . 0 . 0 . RC . 1/lib/Cassandra/session . Rb:103:in execute ' from/home/Florian/Projects/Hadoop-ticket-server/import _ Cassandra . Rb:60:in < code >块(3层)in

你知道我的问题吗?谢谢你

共有1个答案

麹浩瀚
2023-03-14

问题是浮点数。

float中的Ruby在cassandra中被解释为double或float。要在cassandra中输入decimal,我们必须在Ruby中输入BigDecimal。

来源:“http://datastax.github.io/ruby-driver/features/basics/"

解决方案:

session.execute(insert_table_ticket,
                  1,
                  "test",
                  true,
                  BigDecimal.new('1.1'),
                  1,
                  1,
                  BigDecimal.new('1.0'),
                  1415350203,
                  1415350203,
                  BigDecimal.new('1.1'),
                  BigDecimal.new('1.1'),
                  1,
                  1,
                  BigDecimal.new('1.1'),
                  BigDecimal.new('1.1'),
                  "tests",
                  BigDecimal.new('1.1'),
                  BigDecimal.new('1.1'),
                  1415350203
  )
 类似资料:
  • 问题内容: 我正在尝试使用jdbc将一些数据插入到我的数据库中。我正在使用正确的表,数据库名称和参数。一切检查完毕。 代码 这是当我尝试运行它时给我的错误: 问题答案: 您在此行中有语法错误: 您缺少values子句的右括号。

  • 问题内容: SQL查询: MySQL说: 即使在行1062处没有条目,它也会显示此重复的条目错误。(ID是主键,并且是unique(ID_Category,Keyword))。你能帮我吗?… 问题答案: 您的数据库中已经有一行带有值“ 18”和“免费邮件”的行。由于存在唯一性约束,因此不能有两个这样的行。您有一些选择: 删除原始行,然后再次尝试插入:。 删除唯一性约束以允许两行同时存在。 使用忽略

  • 问题内容: 插入数据库时​​出现错误。 代码: 忽略dbquery,与mysql_query完全一样。 我收到的错误是: 不知道为什么会引发此错误! 问题答案: 教一个人如何钓鱼。 如果查询失败,那么您应该做的第一件事就是回显您要发送的查询: 通常,最终查询到底出了什么问题,这是很明显的。要特别注意查询中的动态内容,通常要注意MySQL抱怨的区域。 如果看起来还可以,那么您会寻找可能需要转义的单词

  • 我在尝试将记录插入数据库时遇到错误。 错误如下: 守则: 数据库:

  • 环境: > java 7 Cassandra 2.1.2在Windows 8.1的一个简单节点上运行在我的本地开发工作站上 驱动核心 运行环境: apache karaf 2.3.8 我试图通过在一个由简单类型(坐标为x和y)定义的列中提供一个json来插入一行。 我构建这个java语句: 在执行此操作时: 我有以下错误(完整堆栈跟踪在此消息末尾): [在下面的CQL语句中,我对列名进行了匿名化,

  • 问题内容: 我正在使用PHP。 请问什么是将新记录插入具有唯一字段的数据库的正确方法。我正在批量插入很多记录,我只想插入新记录,并且我不想重复条目有任何错误。 有没有唯一方法可以首先进行SELECT并查看条目是否在INSERT之前已经存在-并且仅在SELECT不返回任何记录时才插入INSERT?我希望不是。 我想以某种方式告诉MySQL忽略这些插入而没有任何错误。 谢谢 问题答案: 如果在重复记录