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

如何使用@InsertProvider在postgresql数组(整数[])类型列中插入java ArrayList

吕俊美
2023-03-14

我有一个mapper方法,定义如下

@InsertProvider(type = ActivityMapperSQLBuilder.class, method = "insertIntoActivityComment")
    public int insertIntoActivityComment(@Param("activityComment")ActivityComment activityComment);

相应的SQLBuilder方法定义为

public String insertIntoActivityComment(Map<String, Object> params) {
        ActivityComment activityComment = (ActivityComment) params
                .get("activityComment");

        params.put("fileIds",  activityComment.getFileIds());
        params.put("commentType",activityComment.getCommentType());
        params.put("commentText",activityComment.getCommentText());
        params.put("commentingUserId",activityComment.getCommentingUser().getId());
        params.put("attachments",activityComment.getAttachments());
        params.put("activityId",activityComment.getActivity().getId());

        StringBuilder builder = new StringBuilder(
                "insert into activityComment (commenttype, commenttext, commentdate, commentinguser_id, attachments, activity_id, fileids) VALUES "
                        + " (#{commentType}, #{commentText}, now(), #{commentingUserId}, #{attachments}, #{activityId}, #{fileIds} )");

        return builder.toString();
    }

每当我调用我的mappermethod时,如下所示

getActivityMapper().insertIntoActivityComment(activityComment);

我遇到了以下错误。

error updating database.  Cause: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of java.util.ArrayList. Use setObject() with an explicit Types value to specify the type to use.

错误可能涉及ActivityMapper。insertIntoActivityComment Inline设置参数时出错\n####SQL:insert into activityComment(commenttype、commenttext、commentdate、commentinguser_id、attachments、activity_id、FileID)值(?,now(),,,,,?)\原因:组织。postgresql。util。PSQLException:无法推断用于java实例的SQL类型。util。ArrayList。使用带有显式类型值的setObject()指定要使用的类型。"

我的ActivityComment对象的结构是

public class ActivityComment implements Serializable, IsSerializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private ActivityCommentType commentType;
    private String commentText;
    private Timestamp commentDate;
    private Assignment activity;
    private User commentingUser;
    private String attachments;
    private List<Integer> fileIds = new ArrayList<Integer>();

/*getters and setters*
}

有人能帮我把ArrayList插入postgresql数据库吗?

共有1个答案

柴彬
2023-03-14

你需要做的是,获取要插入的数据。然后必须将它们添加到arrayList中。然后我假设您将把arrayList传递给一个函数,该函数负责将数据插入数据库。

要插入arraylist,需要动态地构建查询框架。

我将为您编写一个示例代码,如果需要,可以做一些更改。

//将数据添加到ArrayList中

ArrayList<String> data=new ArrayList<String>();
data.add(value1);
data.add(value2);
data.add(value3);
data.add(value4);
insertIntoMyDatabase(data); // function that will take this arraylist form a query and do the insertion.

//InsertInToMy数据库:

public void insertIntoMyDatabase(ArrayList<String> data) {
PreparedStatement p;
String newdata="";
  for(i=0;i<data.size();i++){ // This loop will take care of framing the query dynamically

                if(i==data.size()-1){
                    newdata+="'"+data.toArray()[i]+"'";
                }else{
                    newdata+="'"+data.toArray()[i]+"',";
                }
String query="insert into table values("+newdata+")"; // This is the framed query for inserting data
try{
p=con.prepareStatement(query);
ResultSet r=pr.executeQuery();
}catch(SQLExecption e){
e.printStacktrace();
}

}
 类似资料:
  • 我在向Postgresql表中插入整数数组时遇到问题,我该怎么做? 其中ball Numbers和ball NumbersMegaBall是ArrayList。用两位数填充。 以下是PostgreSQL表: 这是来自Springboot的错误: 出现意外错误(类型=内部服务器错误,状态=500)。PreparedStatementCallback;错误的SQL语法[INSERT in draw_r

  • 问题内容: 我有一个包含TEXT等数组的复合类型。我在主表中使用它来创建复合类型的数组。 如何生成INSERT命令(不使用复合类型的默认字段名称)?我可以使用复合数组创建一个TEMPORARY TABLE,然后将其插入主表吗? 例如: 第一个INSERT失败,并显示以下消息: 错误:INSERT具有比目标列更多的表达式。 有或没有array []构造都失败。 我的实际使用情况要复杂得多,因为该复合

  • 我正在讨论这个问题,我的时间不多了,所以请大家帮忙:我想插入以下数据: 放入此表: ); 使用knex,这应该类似于smth: 由于这种语法对数组类型不起作用,我想知道如何做到这一点?有些人建议使用knex.raw(),但是我没有得到正确的语法,有什么帮助吗?

  • 问题内容: 我找不到用Clojure插入Postgres数组类型的方法。 没按我预期的那样工作。错误信息: 即使是我能找到的对SQL的最直接访问也不起作用: 真的不知道这是怎么回事: 当然一定有可能吗?如果不是通过辅助函数,则通过某种方式执行原始SQL。 问题答案: 使用 插入! 要插入字符串向量,您必须(从字符串向量中)创建一个实现java.sql.Array的对象。您可以使用java.sql.

  • 我试图插入数组数据到数据库使用codeignter.当我打印的值使用乐趣。 它显示正确的结果,但当我单击“保存”按钮时,它会在表中插入空白值。 我只想在处方表中为特定的处方id存储多个药物名称。我试图使用insert_batch函数插入数据,但它会保存空白记录 这是我的型号代码: 控制器代码