You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Cassandra的farmers表插入数据时遭遇SyntaxError报错求助

问题分析与解决方案

核心错误1:INSERT语句语法错误

你构造INSERT语句时,错误地把表定义的语法(int PRIMARY KEY)放到了列名列表里——这是CREATE TABLE才需要的语法,INSERT语句的列名部分只需要写列名即可。

错误语句片段:

INSERT INTO farmers (farmer_id int PRIMARY KEY, the_farmer, delivery) values (...)

正确列名写法:

INSERT INTO farmers (farmer_id, the_farmer, delivery) values (...)

核心错误2:集合类型的字符串拼接错误

直接把Java的HashMap、ArrayList对象拼到CQL语句中,会生成Cassandra不识别的格式。比如HashMap.toString()会输出{Name=Ana Petersen , Farmhouse=The great farmhouse, Foods=Fruits & Vegetables},但Cassandra要求的Map格式是{'Name':'Ana Petersen ', 'Farmhouse':'The great farmhouse', 'Foods':'Fruits & Vegetables'};List同理,元素需要带单引号。

更规范的做法是用PreparedStatement,让Cassandra Driver自动处理Java类型到CQL类型的转换,还能避免SQL注入风险。

修正后的代码

修正insertFarmers方法

//Insert data in table 'farmers'.
public void insertFarmers(int id, HashMap<String, String> the_farmer, ArrayList<String> delivery) {
    Cluster cluster = Cluster.builder()
            .addContactPoints(serverIP)
            .build();
    Session session = cluster.connect("farm_db");
    
    // 使用PreparedStatement规避格式错误与注入风险
    String insert_query = "INSERT INTO farmers (farmer_id, the_farmer, delivery) values (?, ?, ?);";
    PreparedStatement statement = session.prepare(insert_query);
    session.execute(statement.bind(id, the_farmer, delivery));
    
    session.close();
    cluster.close();
}

额外优化建议

  1. 避免重复创建Cluster和Session,建议全局初始化一次,减少资源浪费。
  2. 方法名拼写错误:crateDatabase应改为createDatabase。

验证效果

执行修正后的代码后,查询farmers表:

cqlsh:farm_db> select * from farmers;

会看到插入的数据:

farmer_id | delivery          | the_farmer
-----------+-------------------+---------------------------------------------------------------------
         1 | ['Village 1', 'Village 2'] | {'Name': 'Ana Petersen ', 'Farmhouse': 'The great farmhouse', 'Foods': 'Fruits & Vegetables'}

内容的提问来源于stack exchange,提问作者Mewken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:24:19